簡體   English   中英

在啟用ARC的情況下將強引用對象設置為nil?

[英]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元素作為強引用和弱引用?

viewDidUnloaddealloc中將網點設置為零的需求之間是有區別的

擁有ARC意味着您不需要在dealloc方法中編寫它(它會自動完成),但是viewDidUnload方法還有另一個用途,它是在出現內存警告時釋放應用程序未使用的內存。 在某些情況下,例如,當您的課程注冊為通知時,或者當您的課程是其他人的委托並且您不希望出現一些故障回調時,仍然需要使用dealloc

當您收到內存警告時,所有未顯示的UIViewControllers將卸載其視圖並調用該方法以釋放內存。 如果您仍然保留插座(如按鈕,表格等),它們將不會被釋放,因此會破壞viewDidUnload方法的用途。

例如,在使用ARC時,無需使用諸如retaincopy類的修飾符。 使用strong修飾符和weak修飾符會自動完成這種內存管理。

您也不必擔心編寫dealloc方法。

strong一種等價 retain ,所以你應該用它標記您的店鋪

@property(nonatomic, strong) IBOutlet UIButton *bt;

這就是界面生成器默認創建它們的方式。

我不會詳細介紹它們的語義差異,但是如果您想了解發生了什么並了解strong修飾符和weak修飾符的細節,則應該真正查看Apple過渡到ARC的指南

編輯:對不起,默認情況下,界面生成器會創建帶有weak的插座。

編輯2: strongretain確實是100%相同。 (感謝@Adam)

編輯3:您將指針設置為nil以避免將任何message sent to deallocated instanceBAD_ACCESS_EXCEPTION錯誤。

如果您實際使用的是ARC,則應將出口(nonatomic, weak)而不是(nonatomic, strong)做成。 通過使用weak歸零指針,編譯器將自動執行將出口設置為nil ,而沒有其他引用它們的情況。

因此,總而言之,如果您使用weak屬性, 則應將指針設置為nil。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM