44
55#import " flutter/shell/platform/darwin/common/framework/Headers/FlutterChannels.h"
66
7- FLUTTER_ASSERT_ARC
8-
97#pragma mark - Basic message channel
108
119static NSString * const kFlutterChannelBuffersChannel = @" dev.flutter/channel-buffers" ;
@@ -53,9 +51,9 @@ + (instancetype)messageChannelWithName:(NSString*)name
5351+ (instancetype )messageChannelWithName : (NSString *)name
5452 binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger
5553 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 ];
5957}
6058
6159- (instancetype )initWithName : (NSString *)name
@@ -71,13 +69,21 @@ - (instancetype)initWithName:(NSString*)name
7169 taskQueue : (NSObject <FlutterTaskQueue>*)taskQueue {
7270 self = [super init ];
7371 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 ] ;
7876 return self;
7977}
8078
79+ - (void )dealloc {
80+ [_name release ];
81+ [_messenger release ];
82+ [_codec release ];
83+ [_taskQueue release ];
84+ [super dealloc ];
85+ }
86+
8187- (void )sendMessage : (id )message {
8288 [_messenger sendOnChannel: _name message: [_codec encode: message]];
8389}
@@ -101,10 +107,7 @@ - (void)setMessageHandler:(FlutterMessageHandler)handler {
101107 }
102108 return ;
103109 }
104-
105110 // 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`
108111 NSObject <FlutterMessageCodec>* codec = _codec;
109112 FlutterBinaryMessageHandler messageHandler = ^(NSData * message, FlutterBinaryReply callback) {
110113 handler ([codec decode: message], ^(id reply) {
@@ -125,19 +128,26 @@ - (void)resizeChannelBuffer:(NSInteger)newSize {
125128// //////////////////////////////////////////////////////////////////////////////
126129@implementation FlutterError
127130+ (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 ];
129132}
130133
131134- (instancetype )initWithCode : (NSString *)code message : (NSString *)message details : (id )details {
132135 NSAssert (code, @" Code cannot be nil" );
133136 self = [super init ];
134137 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 ] ;
138141 return self;
139142}
140143
144+ - (void )dealloc {
145+ [_code release ];
146+ [_message release ];
147+ [_details release ];
148+ [super dealloc ];
149+ }
150+
141151- (BOOL )isEqual : (id )object {
142152 if (self == object) {
143153 return YES ;
@@ -159,18 +169,24 @@ - (NSUInteger)hash {
159169// //////////////////////////////////////////////////////////////////////////////
160170@implementation FlutterMethodCall
161171+ (instancetype )methodCallWithMethodName : (NSString *)method arguments : (id )arguments {
162- return [[FlutterMethodCall alloc ] initWithMethodName: method arguments: arguments];
172+ return [[[ FlutterMethodCall alloc ] initWithMethodName: method arguments: arguments] autorelease ];
163173}
164174
165175- (instancetype )initWithMethodName : (NSString *)method arguments : (id )arguments {
166176 NSAssert (method, @" Method name cannot be nil" );
167177 self = [super init ];
168178 NSAssert (self, @" Super init cannot be nil" );
169- _method = [method copy ];
170- _arguments = arguments;
179+ _method = [method retain ];
180+ _arguments = [ arguments retain ] ;
171181 return self;
172182}
173183
184+ - (void )dealloc {
185+ [_method release ];
186+ [_arguments release ];
187+ [super dealloc ];
188+ }
189+
174190- (BOOL )isEqual : (id )object {
175191 if (self == object) {
176192 return YES ;
@@ -208,7 +224,8 @@ + (instancetype)methodChannelWithName:(NSString*)name
208224+ (instancetype )methodChannelWithName : (NSString *)name
209225 binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger
210226 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 ];
212229}
213230
214231- (instancetype )initWithName : (NSString *)name
@@ -223,13 +240,21 @@ - (instancetype)initWithName:(NSString*)name
223240 taskQueue : (NSObject <FlutterTaskQueue>*)taskQueue {
224241 self = [super init ];
225242 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 ] ;
230247 return self;
231248}
232249
250+ - (void )dealloc {
251+ [_name release ];
252+ [_messenger release ];
253+ [_codec release ];
254+ [_taskQueue release ];
255+ [super dealloc ];
256+ }
257+
233258- (void )invokeMethod : (NSString *)method arguments : (id )arguments {
234259 FlutterMethodCall* methodCall = [FlutterMethodCall methodCallWithMethodName: method
235260 arguments: arguments];
@@ -260,8 +285,6 @@ - (void)setMethodCallHandler:(FlutterMethodCallHandler)handler {
260285 return ;
261286 }
262287 // 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`
265288 NSObject <FlutterMethodCodec>* codec = _codec;
266289 FlutterBinaryMessageHandler messageHandler = ^(NSData * message, FlutterBinaryReply callback) {
267290 FlutterMethodCall* call = [codec decodeMethodCall: message];
@@ -305,7 +328,8 @@ + (instancetype)eventChannelWithName:(NSString*)name
305328+ (instancetype )eventChannelWithName : (NSString *)name
306329 binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger
307330 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 ];
309333}
310334
311335- (instancetype )initWithName : (NSString *)name
@@ -320,13 +344,21 @@ - (instancetype)initWithName:(NSString*)name
320344 taskQueue : (NSObject <FlutterTaskQueue>* _Nullable)taskQueue {
321345 self = [super init ];
322346 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 ] ;
327351 return self;
328352}
329353
354+ - (void )dealloc {
355+ [_name release ];
356+ [_codec release ];
357+ [_messenger release ];
358+ [_taskQueue release ];
359+ [super dealloc ];
360+ }
361+
330362static FlutterBinaryMessengerConnection SetStreamHandlerMessageHandlerOnChannel (
331363 NSObject <FlutterStreamHandler>* handler,
332364 NSString * name,
0 commit comments