ARC中:
1梳虽、可以說ARC所引入的最嚴格的限制是不能在C結(jié)構(gòu)體中放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溉躲、橋接轉(zhuǎn)換問題榜田。如果不進行細究寸认,NSString和CFStringRef是一樣的東西。在ARC中串慰,編譯器需要知道這些指針應該由誰來負責釋放偏塞,如果把一個NSObject看做是CF對象的話,那么ARC就不再負責它的釋放工作(記住ARC是only for NSObject的)
__bridge 只做類型轉(zhuǎn)換邦鲫,不改變對象所有權(quán)灸叼,是我們最常用的轉(zhuǎn)換符。
從OC轉(zhuǎn)CF庆捺,ARC管理內(nèi)存:
栗子:
- (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禁止結(jié)構(gòu)體里面有對象屬性(ARC forbids Objective-C objects in struct)。
5滔以、ARC中property屬性必須指定一個內(nèi)存管理關鍵字捉腥,在屬性定義處增加strong關鍵字即可。
http://www.cocoachina.com/ios/20141117/10230.html
6你画、出現(xiàn)__unsafe_unretained錯誤抵碟,
unsafe_unretained等效于__unsafe_unretaind關鍵字聲明的變量;像上面說明的坏匪,iOS 5之前的系統(tǒng)用該屬性代替 weak來使用拟逮。
@interface CallViewController : UIViewController {
__weak NgnContact* contact;
}
@property (nonatomic, weak) NgnContact* contact;