diff --git a/shell/platform/darwin/common/BUILD.gn b/shell/platform/darwin/common/BUILD.gn index 45a9e3092b2bc..eea8c0c74f512 100644 --- a/shell/platform/darwin/common/BUILD.gn +++ b/shell/platform/darwin/common/BUILD.gn @@ -38,8 +38,8 @@ config("framework_relative_headers") { # Framework code shared between iOS and macOS. source_set("framework_shared") { - cflags_objc = flutter_cflags_objc - cflags_objcc = flutter_cflags_objcc + cflags_objc = flutter_cflags_objc_arc + cflags_objcc = flutter_cflags_objcc_arc sources = [ "framework/Source/FlutterChannels.mm", diff --git a/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h b/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h index 3ba5d4e9c2580..815d881ec4de0 100644 --- a/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h +++ b/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h @@ -230,7 +230,7 @@ FLUTTER_DARWIN_EXPORT /** * The method name. */ -@property(readonly, nonatomic) NSString* method; +@property(readonly, nonatomic, copy) NSString* method; /** * The arguments. @@ -257,12 +257,12 @@ FLUTTER_DARWIN_EXPORT /** The error code. */ -@property(readonly, nonatomic) NSString* code; +@property(readonly, nonatomic, copy) NSString* code; /** The error message. */ -@property(readonly, nonatomic, nullable) NSString* message; +@property(readonly, nonatomic, nullable, copy) NSString* message; /** The error details. @@ -344,17 +344,17 @@ FLUTTER_DARWIN_EXPORT /** * The type of the encoded values. */ -@property(readonly, nonatomic) FlutterStandardDataType type; +@property(readonly, nonatomic, assign) FlutterStandardDataType type; /** * The number of value items encoded. */ -@property(readonly, nonatomic) UInt32 elementCount; +@property(readonly, nonatomic, assign) UInt32 elementCount; /** * The number of bytes used by the encoding of a single value item. */ -@property(readonly, nonatomic) UInt8 elementSize; +@property(readonly, nonatomic, assign) UInt8 elementSize; @end /** diff --git a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm index 30b306a301f39..47e54cb3501c6 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm @@ -51,9 +51,9 @@ + (instancetype)messageChannelWithName:(NSString*)name + (instancetype)messageChannelWithName:(NSString*)name binaryMessenger:(NSObject*)messenger codec:(NSObject*)codec { - return [[[FlutterBasicMessageChannel alloc] initWithName:name - binaryMessenger:messenger - codec:codec] autorelease]; + return [[FlutterBasicMessageChannel alloc] initWithName:name + binaryMessenger:messenger + codec:codec]; } - (instancetype)initWithName:(NSString*)name @@ -69,21 +69,13 @@ - (instancetype)initWithName:(NSString*)name taskQueue:(NSObject*)taskQueue { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _name = [name retain]; - _messenger = [messenger retain]; - _codec = [codec retain]; - _taskQueue = [taskQueue retain]; + _name = name; + _messenger = messenger; + _codec = codec; + _taskQueue = taskQueue; return self; } -- (void)dealloc { - [_name release]; - [_messenger release]; - [_codec release]; - [_taskQueue release]; - [super dealloc]; -} - - (void)sendMessage:(id)message { [_messenger sendOnChannel:_name message:[_codec encode:message]]; } @@ -108,7 +100,7 @@ - (void)setMessageHandler:(FlutterMessageHandler)handler { return; } // Grab reference to avoid retain on self. - NSObject* codec = _codec; + __weak NSObject* codec = _codec; FlutterBinaryMessageHandler messageHandler = ^(NSData* message, FlutterBinaryReply callback) { handler([codec decode:message], ^(id reply) { callback([codec encode:reply]); @@ -128,26 +120,19 @@ - (void)resizeChannelBuffer:(NSInteger)newSize { //////////////////////////////////////////////////////////////////////////////// @implementation FlutterError + (instancetype)errorWithCode:(NSString*)code message:(NSString*)message details:(id)details { - return [[[FlutterError alloc] initWithCode:code message:message details:details] autorelease]; + return [[FlutterError alloc] initWithCode:code message:message details:details]; } - (instancetype)initWithCode:(NSString*)code message:(NSString*)message details:(id)details { NSAssert(code, @"Code cannot be nil"); self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _code = [code retain]; - _message = [message retain]; - _details = [details retain]; + _code = code; + _message = message; + _details = details; return self; } -- (void)dealloc { - [_code release]; - [_message release]; - [_details release]; - [super dealloc]; -} - - (BOOL)isEqual:(id)object { if (self == object) { return YES; @@ -169,24 +154,18 @@ - (NSUInteger)hash { //////////////////////////////////////////////////////////////////////////////// @implementation FlutterMethodCall + (instancetype)methodCallWithMethodName:(NSString*)method arguments:(id)arguments { - return [[[FlutterMethodCall alloc] initWithMethodName:method arguments:arguments] autorelease]; + return [[FlutterMethodCall alloc] initWithMethodName:method arguments:arguments]; } - (instancetype)initWithMethodName:(NSString*)method arguments:(id)arguments { NSAssert(method, @"Method name cannot be nil"); self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _method = [method retain]; - _arguments = [arguments retain]; + _method = method; + _arguments = arguments; return self; } -- (void)dealloc { - [_method release]; - [_arguments release]; - [super dealloc]; -} - - (BOOL)isEqual:(id)object { if (self == object) { return YES; @@ -224,8 +203,7 @@ + (instancetype)methodChannelWithName:(NSString*)name + (instancetype)methodChannelWithName:(NSString*)name binaryMessenger:(NSObject*)messenger codec:(NSObject*)codec { - return [[[FlutterMethodChannel alloc] initWithName:name binaryMessenger:messenger - codec:codec] autorelease]; + return [[FlutterMethodChannel alloc] initWithName:name binaryMessenger:messenger codec:codec]; } - (instancetype)initWithName:(NSString*)name @@ -240,21 +218,13 @@ - (instancetype)initWithName:(NSString*)name taskQueue:(NSObject*)taskQueue { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _name = [name retain]; - _messenger = [messenger retain]; - _codec = [codec retain]; - _taskQueue = [taskQueue retain]; + _name = name; + _messenger = messenger; + _codec = codec; + _taskQueue = taskQueue; return self; } -- (void)dealloc { - [_name release]; - [_messenger release]; - [_codec release]; - [_taskQueue release]; - [super dealloc]; -} - - (void)invokeMethod:(NSString*)method arguments:(id)arguments { FlutterMethodCall* methodCall = [FlutterMethodCall methodCallWithMethodName:method arguments:arguments]; @@ -285,7 +255,7 @@ - (void)setMethodCallHandler:(FlutterMethodCallHandler)handler { return; } // Make sure the block captures the codec, not self. - NSObject* codec = _codec; + __weak NSObject* codec = _codec; FlutterBinaryMessageHandler messageHandler = ^(NSData* message, FlutterBinaryReply callback) { FlutterMethodCall* call = [codec decodeMethodCall:message]; handler(call, ^(id result) { @@ -328,8 +298,7 @@ + (instancetype)eventChannelWithName:(NSString*)name + (instancetype)eventChannelWithName:(NSString*)name binaryMessenger:(NSObject*)messenger codec:(NSObject*)codec { - return [[[FlutterEventChannel alloc] initWithName:name binaryMessenger:messenger - codec:codec] autorelease]; + return [[FlutterEventChannel alloc] initWithName:name binaryMessenger:messenger codec:codec]; } - (instancetype)initWithName:(NSString*)name @@ -344,21 +313,13 @@ - (instancetype)initWithName:(NSString*)name taskQueue:(NSObject* _Nullable)taskQueue { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _name = [name retain]; - _messenger = [messenger retain]; - _codec = [codec retain]; - _taskQueue = [taskQueue retain]; + _name = name; + _messenger = messenger; + _codec = codec; + _taskQueue = taskQueue; return self; } -- (void)dealloc { - [_name release]; - [_codec release]; - [_messenger release]; - [_taskQueue release]; - [super dealloc]; -} - static FlutterBinaryMessengerConnection SetStreamHandlerMessageHandlerOnChannel( NSObject* handler, NSString* name, diff --git a/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm b/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm index 8ea26cc258063..e63315880e71a 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm @@ -48,7 +48,7 @@ - (NSString*)decode:(NSData*)message { if (message == nil) { return nil; } - return [[[NSString alloc] initWithData:message encoding:NSUTF8StringEncoding] autorelease]; + return [[NSString alloc] initWithData:message encoding:NSUTF8StringEncoding]; } @end diff --git a/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm b/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm index eeb3ef918b0c3..3151082779f1f 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm @@ -12,29 +12,23 @@ @implementation FlutterStandardMessageCodec { + (instancetype)sharedInstance { static id _sharedInstance = nil; if (!_sharedInstance) { - FlutterStandardReaderWriter* readerWriter = - [[[FlutterStandardReaderWriter alloc] init] autorelease]; + FlutterStandardReaderWriter* readerWriter = [[FlutterStandardReaderWriter alloc] init]; _sharedInstance = [[FlutterStandardMessageCodec alloc] initWithReaderWriter:readerWriter]; } return _sharedInstance; } + (instancetype)codecWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter { - return [[[FlutterStandardMessageCodec alloc] initWithReaderWriter:readerWriter] autorelease]; + return [[FlutterStandardMessageCodec alloc] initWithReaderWriter:readerWriter]; } - (instancetype)initWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _readerWriter = [readerWriter retain]; + _readerWriter = readerWriter; return self; } -- (void)dealloc { - [_readerWriter release]; - [super dealloc]; -} - - (NSData*)encode:(id)message { if (message == nil) { return nil; @@ -64,29 +58,23 @@ @implementation FlutterStandardMethodCodec { + (instancetype)sharedInstance { static id _sharedInstance = nil; if (!_sharedInstance) { - FlutterStandardReaderWriter* readerWriter = - [[[FlutterStandardReaderWriter alloc] init] autorelease]; + FlutterStandardReaderWriter* readerWriter = [[FlutterStandardReaderWriter alloc] init]; _sharedInstance = [[FlutterStandardMethodCodec alloc] initWithReaderWriter:readerWriter]; } return _sharedInstance; } + (instancetype)codecWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter { - return [[[FlutterStandardMethodCodec alloc] initWithReaderWriter:readerWriter] autorelease]; + return [[FlutterStandardMethodCodec alloc] initWithReaderWriter:readerWriter]; } - (instancetype)initWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _readerWriter = [readerWriter retain]; + _readerWriter = readerWriter; return self; } -- (void)dealloc { - [_readerWriter release]; - [super dealloc]; -} - - (NSData*)encodeMethodCall:(FlutterMethodCall*)call { NSMutableData* data = [NSMutableData dataWithCapacity:32]; FlutterStandardWriter* writer = [_readerWriter writerWithData:data]; @@ -173,7 +161,7 @@ + (instancetype)typedDataWithFloat64:(NSData*)data { } + (instancetype)typedDataWithData:(NSData*)data type:(FlutterStandardDataType)type { - return [[[FlutterStandardTypedData alloc] initWithData:data type:type] autorelease]; + return [[FlutterStandardTypedData alloc] initWithData:data type:type]; } - (instancetype)initWithData:(NSData*)data type:(FlutterStandardDataType)type { @@ -182,18 +170,13 @@ - (instancetype)initWithData:(NSData*)data type:(FlutterStandardDataType)type { NSAssert(data.length % elementSize == 0, @"Data must contain integral number of elements"); self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _data = [data retain]; + _data = data; _type = type; _elementSize = elementSize; _elementCount = data.length / elementSize; return self; } -- (void)dealloc { - [_data release]; - [super dealloc]; -} - - (BOOL)isEqual:(id)object { if (self == object) { return YES; @@ -220,15 +203,10 @@ @implementation FlutterStandardWriter { - (instancetype)initWithData:(NSMutableData*)data { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _data = [data retain]; + _data = data; return self; } -- (void)dealloc { - [_data release]; - [super dealloc]; -} - - (void)writeByte:(UInt8)value { [_data appendBytes:&value length:1]; } @@ -273,7 +251,7 @@ - (void)writeValue:(id)value { if (value == nil || value == [NSNull null]) { [self writeByte:FlutterStandardFieldNil]; } else if ([value isKindOfClass:[NSNumber class]]) { - CFNumberRef number = (CFNumberRef)value; + CFNumberRef number = (__bridge CFNumberRef)value; BOOL success = NO; if (CFGetTypeID(number) == CFBooleanGetTypeID()) { BOOL b = CFBooleanGetValue((CFBooleanRef)number); @@ -348,16 +326,11 @@ @implementation FlutterStandardReader { - (instancetype)initWithData:(NSData*)data { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _data = [data retain]; + _data = data; _range = NSMakeRange(0, 0); return self; } -- (void)dealloc { - [_data release]; - [super dealloc]; -} - - (BOOL)hasMore { return _range.location < _data.length; } @@ -398,7 +371,7 @@ - (NSData*)readData:(NSUInteger)length { - (NSString*)readUTF8 { NSData* bytes = [self readData:[self readSize]]; - return [[[NSString alloc] initWithData:bytes encoding:NSUTF8StringEncoding] autorelease]; + return [[NSString alloc] initWithData:bytes encoding:NSUTF8StringEncoding]; } - (void)readAlignment:(UInt8)alignment { @@ -482,10 +455,10 @@ - (nullable id)readValueOfType:(UInt8)type { @implementation FlutterStandardReaderWriter - (FlutterStandardWriter*)writerWithData:(NSMutableData*)data { - return [[[FlutterStandardWriter alloc] initWithData:data] autorelease]; + return [[FlutterStandardWriter alloc] initWithData:data]; } - (FlutterStandardReader*)readerWithData:(NSData*)data { - return [[[FlutterStandardReader alloc] initWithData:data] autorelease]; + return [[FlutterStandardReader alloc] initWithData:data]; } @end