簡體   English   中英

IBOutlet成員變量會自動保留嗎?

[英]Do IBOutlet member vars retain automatically?

奇怪的發現,當我使用拖放來創建一個新的IBOutlet時,如下所示,根本沒有使用@property:

@interface SkinChoosingView : UIViewController {
    IBOutlet UIActivityIndicatorView * activityIndicator;
}

Xcode插入-release並在viewDidUnload中將插座設置為nil。 我在viewDidLoad中看起來雖然沒有-retain在那里! 這違背了我對內存管理的所有了解。

我認為蘋果必須知道關於這個東西的一兩件事,那么幕后發生的事情是什么? 我從來沒有從這些類型的IBOutlets泄漏,我從來沒有發布它們。

是的,它會在加載NIB文件時自動保留插座,除非您明確聲明與插座關聯的屬性為assign屬性。

並且由於它為您保留了插座,因此必須在viewDidUnload釋放,因為在調用下一個viewDidLoad時將重新加載插座。

答案是它使用“Key-Value Coading”,這意味着它調用-setValue:forKey: ,它具有“默認搜索模式” 對於ivars,它有點像[ivar autorelease]; ivar = [newvalue retain]; [ivar autorelease]; ivar = [newvalue retain];

“當前的最佳實踐”是將IBOutlet粘貼在屬性而不是ivars上(參見此處 )。 這使得顯而易見的是正在使用的內存管理模式以及對拼寫錯誤更具彈性(例如,如果拼錯了ivar)。

暫無
暫無

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

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