MRC轉(zhuǎn)ARC

ARC中:

1、可以說ARC所引入的最嚴(yán)格的限制是不能在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等開頭的,而且還不是類的初始化方法,就該小心了,要么報(bào)錯,要么警告,原因你懂的。

3、橋接轉(zhuǎn)換問題。如果不進(jìn)行細(xì)究,NSString和CFStringRef是一樣的東西。在ARC中,編譯器需要知道這些指針應(yīng)該由誰來負(fù)責(zé)釋放,如果把一個NSObject看做是CF對象的話,那么ARC就不再負(fù)責(zé)它的釋放工作(記住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)存管理關(guān)鍵字,在屬性定義處增加strong關(guān)鍵字即可。

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

6、出現(xiàn)__unsafe_unretained錯誤,

unsafe_unretained等效于__unsafe_unretaind關(guān)鍵字聲明的變量;像上面說明的,iOS 5之前的系統(tǒng)用該屬性代替 weak來使用。

@interface CallViewController : UIViewController {

__weak NgnContact* contact;

}

@property (nonatomic, weak) NgnContact* contact;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容