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;

你可能感兴趣的:(MRC转ARC)