簡體   English   中英

保留IBOutlet視圖元素真的是最佳做法嗎?

[英]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.

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