[英]Really best practice to retain IBOutlet view elements?
我一直遇到UIViewControllers的情況,其中包含大量的IBOutlets,將控制器連接到其視圖的子視圖(通常是UILabels)。
遵循“最佳實踐”,即在所有UI元素上使用retain: @property (retain, nonatomic) UILabel *theElement1
, @property (retain, nonatomic) UILabel *theElement2
@property (retain, nonatomic) UILabel *theElement1
@property (retain, nonatomic) UILabel *theElement2
,...在dealloc
給我瘋狂的鍋爐板代碼量viewDidUnload
用於視圖控制器。
違規IBOutlets永遠不會被使用,也不會在UIViewController之外設置(set-method僅用於viewDidUnload和加載nib時),除非在加載nib時自動執行。
“最佳實踐”的結果是:
dealloc
散落着[theElement1 release]
, [theElement2 release]
等。 viewDidUnload
與[self setTheElement1:nil]
, [self setTheElement2:nil]
等。 但是,由於所有這些元素都已被視圖保留,並且UIViewController在適當的時候釋放了視圖,因此我完全沒有理由手動管理它。
這種特殊“最佳實踐”(據我所知)的原因是與您的保留一致。 但是,一旦你開始擁有大量的網點,你就更有可能錯過在兩種方法中的任何一種方式處理某個插座,而不是你無法正確地改變網點以“保留”你真正想要的那些特殊插座即使在觀看結束后再保留。
這個“最佳實踐”除了我所知道的之外還有什么理由,或者在UIViewController視圖的子視圖的特定情況下我是否可以自由地打破這個“規則”?
你應該堅持這個最佳實踐。 當您在內存警告后訪問IBOutlets時,它可以保護您免受非常奇怪的崩潰。 是的,您需要手動管理您的IBOutlets。 Accessorizer可以很好地自動執行此代碼。
在ObjC 2.0之前,我們必須手動編寫所有的訪問器(@property和@synthesize是該語言的新增功能)。 事情變得更好了。 隨着我們轉向64位ABI和垃圾收集,事情變得更加簡單(你應該期望這些東西最終能夠進入iPhone)。
但是現在,請遵循Nib Objects的Memory Management中列出的內存管理規則。 您需要進行非常少量的輸入以進行大量調試。 (嗯,看起來他們已經再次更新了這個文檔;是時候自己學習了。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.