[英]Setting strong references objects to nil with ARC enabled?
我正在開發啟用了ARC選項的iPhone應用程序。 我正在.h文件中創建IBOutlets,這些文件從文件所有者圖標連接到.xib elements.for。
IBOutlet UIButton *bt;
@property(nonatomic,retain)IBOutlet UIButton *bt;
在.m文件中,我正在做
@synthesize bt;
是否需要在viewDidUnload
方法中將bt
顯式設置為nil? 即self.bt = nil;
在viewDidUnload
?
另外,是否需要在啟用ARC選項的情況下編寫dealloc
方法? 在啟用ARC的情況下,何時應將IBOutlets元素作為強引用和弱引用?
在viewDidUnload
和dealloc
中將網點設置為零的需求之間是有區別的
擁有ARC意味着您不需要在dealloc
方法中編寫它(它會自動完成),但是viewDidUnload
方法還有另一個用途,它是在出現內存警告時釋放應用程序未使用的內存。 在某些情況下,例如,當您的課程注冊為通知時,或者當您的課程是其他人的委托並且您不希望出現一些故障回調時,仍然需要使用dealloc
當您收到內存警告時,所有未顯示的UIViewControllers
將卸載其視圖並調用該方法以釋放內存。 如果您仍然保留插座(如按鈕,表格等),它們將不會被釋放,因此會破壞viewDidUnload方法的用途。
例如,在使用ARC時,無需使用諸如retain
或copy
類的修飾符。 使用strong
修飾符和weak
修飾符會自動完成這種內存管理。
您也不必擔心編寫dealloc
方法。
strong
是一種等價的 retain
,所以你應該用它標記您的店鋪
@property(nonatomic, strong) IBOutlet UIButton *bt;
這就是界面生成器默認創建它們的方式。
我不會詳細介紹它們的語義差異,但是如果您想了解發生了什么並了解strong
修飾符和weak
修飾符的細節,則應該真正查看Apple過渡到ARC的指南 。
編輯:對不起,默認情況下,界面生成器會創建帶有weak
的插座。
編輯2: strong
和retain
確實是100%相同。 (感謝@Adam)
編輯3:您將指針設置為nil
以避免將任何message sent to deallocated instance
或BAD_ACCESS_EXCEPTION
錯誤。
如果您實際使用的是ARC,則應將出口(nonatomic, weak)
而不是(nonatomic, strong)
做成。 通過使用weak
歸零指針,編譯器將自動執行將出口設置為nil
,而沒有其他引用它們的情況。
因此,總而言之,如果您不使用weak
屬性, 則應將指針設置為nil。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.