MRC转ARC

ARC中:

1、可以说ARC所引入的最严格的限制是不能在C结构体中放OC对象了..因此类似下面这样的代码是不可用的(ARC forbids Objective-C objects in structs or unions)

2、不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”)。

ARC下方法名如果是以new/alloc/init等开头的,而且还不是类的初始化方法,就该小心了,要么报错,要么警告,原因你懂的。

3、桥接转换问题。如果不进行细究,NSString和CFStringRef是一样的东西。在ARC中,编译器需要知道这些指针应该由谁来负责释放,如果把一个NSObject看做是CF对象的话,那么ARC就不再负责它的释放工作(记住ARC是only for NSObject的)

__bridge 只做类型转换,不改变对象所有权,是我们最常用的转换符。

从OC转CF,ARC管理内存:

栗子:

- (void)viewDidLoad

{

[super viewDidLoad];

NSString *aNSString = [[NSString alloc]initWithFormat:@"test"];

CFStringRef aCFString = (__bridge CFStringRef)aNSString;

(void)aCFString;

}

CFArrayApplyFunction(peopleMutable, CFRangeMake(0, CFArrayGetCount(peopleMutable)), NgnAddressBookCallbackForElements, (__bridge void*)self);

例子:ABMultiValueAddValueAndLabel(multiValue, (__bridge void*)self.labelNumber.text, kABPersonPhoneMobileLabel, NULL);

4、ARC禁止结构体里面有对象属性(ARC forbids Objective-C objects in struct)。

5、ARC中property属性必须指定一个内存管理关键字,在属性定义处增加strong关键字即可。

http://www.cocoachina.com/ios/20141117/10230.html

6、出现__unsafe_unretained错误,

unsafe_unretained等效于__unsafe_unretaind关键字声明的变量;像上面说明的,iOS 5之前的系统用该属性代替 weak来使用。

@interface CallViewController : UIViewController {

__weak NgnContact* contact;

}

@property (nonatomic, weak) NgnContact* contact;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容