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;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容