4
4
5
5
#import " flutter/shell/platform/darwin/common/framework/Headers/FlutterChannels.h"
6
6
7
- FLUTTER_ASSERT_ARC
8
-
9
7
#pragma mark - Basic message channel
10
8
11
9
static NSString * const kFlutterChannelBuffersChannel = @" dev.flutter/channel-buffers" ;
@@ -53,9 +51,9 @@ + (instancetype)messageChannelWithName:(NSString*)name
53
51
+ (instancetype )messageChannelWithName : (NSString *)name
54
52
binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger
55
53
codec : (NSObject <FlutterMessageCodec>*)codec {
56
- return [[FlutterBasicMessageChannel alloc ] initWithName: name
57
- binaryMessenger: messenger
58
- codec: codec];
54
+ return [[[ FlutterBasicMessageChannel alloc ] initWithName: name
55
+ binaryMessenger: messenger
56
+ codec: codec] autorelease ];
59
57
}
60
58
61
59
- (instancetype )initWithName : (NSString *)name
@@ -71,13 +69,21 @@ - (instancetype)initWithName:(NSString*)name
71
69
taskQueue : (NSObject <FlutterTaskQueue>*)taskQueue {
72
70
self = [super init ];
73
71
NSAssert (self, @" Super init cannot be nil" );
74
- _name = [name copy ];
75
- _messenger = messenger;
76
- _codec = codec;
77
- _taskQueue = taskQueue;
72
+ _name = [name retain ];
73
+ _messenger = [ messenger retain ] ;
74
+ _codec = [ codec retain ] ;
75
+ _taskQueue = [ taskQueue retain ] ;
78
76
return self;
79
77
}
80
78
79
+ - (void )dealloc {
80
+ [_name release ];
81
+ [_messenger release ];
82
+ [_codec release ];
83
+ [_taskQueue release ];
84
+ [super dealloc ];
85
+ }
86
+
81
87
- (void )sendMessage : (id )message {
82
88
[_messenger sendOnChannel: _name message: [_codec encode: message]];
83
89
}
@@ -101,10 +107,7 @@ - (void)setMessageHandler:(FlutterMessageHandler)handler {
101
107
}
102
108
return ;
103
109
}
104
-
105
110
// Grab reference to avoid retain on self.
106
- // `self` might be released before the block, so the block needs to retain the codec to
107
- // make sure it is not released with `self`
108
111
NSObject <FlutterMessageCodec>* codec = _codec;
109
112
FlutterBinaryMessageHandler messageHandler = ^(NSData * message, FlutterBinaryReply callback) {
110
113
handler ([codec decode: message], ^(id reply) {
@@ -125,19 +128,26 @@ - (void)resizeChannelBuffer:(NSInteger)newSize {
125
128
// //////////////////////////////////////////////////////////////////////////////
126
129
@implementation FlutterError
127
130
+ (instancetype )errorWithCode : (NSString *)code message : (NSString *)message details : (id )details {
128
- return [[FlutterError alloc ] initWithCode: code message: message details: details];
131
+ return [[[ FlutterError alloc ] initWithCode: code message: message details: details] autorelease ];
129
132
}
130
133
131
134
- (instancetype )initWithCode : (NSString *)code message : (NSString *)message details : (id )details {
132
135
NSAssert (code, @" Code cannot be nil" );
133
136
self = [super init ];
134
137
NSAssert (self, @" Super init cannot be nil" );
135
- _code = [code copy ];
136
- _message = [message copy ];
137
- _details = details;
138
+ _code = [code retain ];
139
+ _message = [message retain ];
140
+ _details = [ details retain ] ;
138
141
return self;
139
142
}
140
143
144
+ - (void )dealloc {
145
+ [_code release ];
146
+ [_message release ];
147
+ [_details release ];
148
+ [super dealloc ];
149
+ }
150
+
141
151
- (BOOL )isEqual : (id )object {
142
152
if (self == object) {
143
153
return YES ;
@@ -159,18 +169,24 @@ - (NSUInteger)hash {
159
169
// //////////////////////////////////////////////////////////////////////////////
160
170
@implementation FlutterMethodCall
161
171
+ (instancetype )methodCallWithMethodName : (NSString *)method arguments : (id )arguments {
162
- return [[FlutterMethodCall alloc ] initWithMethodName: method arguments: arguments];
172
+ return [[[ FlutterMethodCall alloc ] initWithMethodName: method arguments: arguments] autorelease ];
163
173
}
164
174
165
175
- (instancetype )initWithMethodName : (NSString *)method arguments : (id )arguments {
166
176
NSAssert (method, @" Method name cannot be nil" );
167
177
self = [super init ];
168
178
NSAssert (self, @" Super init cannot be nil" );
169
- _method = [method copy ];
170
- _arguments = arguments;
179
+ _method = [method retain ];
180
+ _arguments = [ arguments retain ] ;
171
181
return self;
172
182
}
173
183
184
+ - (void )dealloc {
185
+ [_method release ];
186
+ [_arguments release ];
187
+ [super dealloc ];
188
+ }
189
+
174
190
- (BOOL )isEqual : (id )object {
175
191
if (self == object) {
176
192
return YES ;
@@ -208,7 +224,8 @@ + (instancetype)methodChannelWithName:(NSString*)name
208
224
+ (instancetype )methodChannelWithName : (NSString *)name
209
225
binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger
210
226
codec : (NSObject <FlutterMethodCodec>*)codec {
211
- return [[FlutterMethodChannel alloc ] initWithName: name binaryMessenger: messenger codec: codec];
227
+ return [[[FlutterMethodChannel alloc ] initWithName: name binaryMessenger: messenger
228
+ codec: codec] autorelease ];
212
229
}
213
230
214
231
- (instancetype )initWithName : (NSString *)name
@@ -223,13 +240,21 @@ - (instancetype)initWithName:(NSString*)name
223
240
taskQueue : (NSObject <FlutterTaskQueue>*)taskQueue {
224
241
self = [super init ];
225
242
NSAssert (self, @" Super init cannot be nil" );
226
- _name = [name copy ];
227
- _messenger = messenger;
228
- _codec = codec;
229
- _taskQueue = taskQueue;
243
+ _name = [name retain ];
244
+ _messenger = [ messenger retain ] ;
245
+ _codec = [ codec retain ] ;
246
+ _taskQueue = [ taskQueue retain ] ;
230
247
return self;
231
248
}
232
249
250
+ - (void )dealloc {
251
+ [_name release ];
252
+ [_messenger release ];
253
+ [_codec release ];
254
+ [_taskQueue release ];
255
+ [super dealloc ];
256
+ }
257
+
233
258
- (void )invokeMethod : (NSString *)method arguments : (id )arguments {
234
259
FlutterMethodCall* methodCall = [FlutterMethodCall methodCallWithMethodName: method
235
260
arguments: arguments];
@@ -260,8 +285,6 @@ - (void)setMethodCallHandler:(FlutterMethodCallHandler)handler {
260
285
return ;
261
286
}
262
287
// Make sure the block captures the codec, not self.
263
- // `self` might be released before the block, so the block needs to retain the codec to
264
- // make sure it is not released with `self`
265
288
NSObject <FlutterMethodCodec>* codec = _codec;
266
289
FlutterBinaryMessageHandler messageHandler = ^(NSData * message, FlutterBinaryReply callback) {
267
290
FlutterMethodCall* call = [codec decodeMethodCall: message];
@@ -305,7 +328,8 @@ + (instancetype)eventChannelWithName:(NSString*)name
305
328
+ (instancetype )eventChannelWithName : (NSString *)name
306
329
binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger
307
330
codec : (NSObject <FlutterMethodCodec>*)codec {
308
- return [[FlutterEventChannel alloc ] initWithName: name binaryMessenger: messenger codec: codec];
331
+ return [[[FlutterEventChannel alloc ] initWithName: name binaryMessenger: messenger
332
+ codec: codec] autorelease ];
309
333
}
310
334
311
335
- (instancetype )initWithName : (NSString *)name
@@ -320,13 +344,21 @@ - (instancetype)initWithName:(NSString*)name
320
344
taskQueue : (NSObject <FlutterTaskQueue>* _Nullable)taskQueue {
321
345
self = [super init ];
322
346
NSAssert (self, @" Super init cannot be nil" );
323
- _name = [name copy ];
324
- _messenger = messenger;
325
- _codec = codec;
326
- _taskQueue = taskQueue;
347
+ _name = [name retain ];
348
+ _messenger = [ messenger retain ] ;
349
+ _codec = [ codec retain ] ;
350
+ _taskQueue = [ taskQueue retain ] ;
327
351
return self;
328
352
}
329
353
354
+ - (void )dealloc {
355
+ [_name release ];
356
+ [_codec release ];
357
+ [_messenger release ];
358
+ [_taskQueue release ];
359
+ [super dealloc ];
360
+ }
361
+
330
362
static FlutterBinaryMessengerConnection SetStreamHandlerMessageHandlerOnChannel (
331
363
NSObject <FlutterStreamHandler>* handler,
332
364
NSString * name,
0 commit comments