我有關釋放IBOutlet對象的內存的困境。任何人都請建議當我們創建沒有屬性的IBOutlet對象時需要做什麼,需要釋放它?如果需要釋放...爲什麼我們要釋放它需要發佈IBOutlet對象嗎?
回答
答案是肯定的。
運行時使用[setValue:ForKey:]
將對象連接到IBOutlet
。該函數將查找私有實例變量,保留目標並將其設置爲實例變量。請訪問iOS Developer Library以瞭解更多信息。
我強烈建議你閱讀文章,因爲許多iOS框架通過鍵值符合性([setValue:ForKey:]
或[valueForKey:]
)訪問屬性,而不是直接調用getters/setters /實例變量。
IBOutlet
不會更改屬性的所有權語義。如果您不使用ARC,則必須像保留其他任何屬性一樣釋放保留的對象。
只需將其設置爲默認值,即「弱」。那麼你對ARC很好。
爲什麼不只是有一個私人IBOutlet屬性,使事情更清晰和更明確。我一直這樣做:
MyClassName.m
@interface MyClassName()
@property (nonatomic, weak) IBOutlet NSObject *myPropertyNameForAnOutlet;
@end
@implementation MyClassName
...
@end
邁克爾你是對的..但仍然有這個困惑。我的問題是,如果m不會給該對象的屬性...仍然需要釋放IBOutlet對象釋放dealloc塊? – SachinVsSachin
對不起,你說得對,這還不夠。但是,如果你使它變弱,並且你正在使用ARC,那麼你可以放心,它會被正確地清理,而不需要你額外的努力。只需將您的用戶界面添加到它並忘記它。如果是非ARC,那麼在viewDidUnload(iOS 6之前)中將其設置爲零,然後在dealloc中釋放它。如果我是你,我會去ARC並節省工作。 – Michael
+1我不知道用'IBOutlet'標記私有屬性(在類擴展中)的可能性。謝謝! –
即使您沒有將它設置爲屬性,該屬性是指setter和getter方法。當你使用一個對象時,你應該永遠記得釋放它。該屬性與內存問題無關。
答案是肯定的......
我感到困惑的是太多,但試試這個:
打開廈門國際銀行文件
onen助理編輯窗口,並讓附近的.h文件中的代碼XIB IB文件
在IB文件(沒有提及任何VAR對象)
CTRL點擊選擇上一個對象,並選擇:「新的參考出口「按鈕
阻力線在@interface {}部分
您.H代碼文件提供一個名稱你的新變種(‘AAA’)
(注意,沒有財產」 AAA 「創建)
現在的Xcode已經爲你做所有的魔法,...
在.m文件就可以發現,在dealloc方法:
- (void) dealloc {
[aaa release];
[super dealloc];
}
so ...如果蘋果釋放它,似乎通過XIB文件加載的默認IBOutlet vars被保留...
編輯:
謝謝meronix ..當我用同樣的方法,你使用.. – SachinVsSachin
蘋果文檔說,如果你採取所有權(分配,保留,複製),那麼你可以釋放它..爲什麼這個對象釋放蘋果dealloc方法 – SachinVsSachin
他們也表示你可以對在nib中加載的對象進行響應:「然後你應該綜合相應的訪問器方法,或者根據聲明來實現它們,並且(在iOS中)在dealloc中釋放相應的變量。」 //:在https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW8 – meronix
您不是該對象的所有者。因此不需要發佈IBOutlet對象。如果您在IBoutlet對象上使用@property(nonatomic,retain),則必須在dealloc中釋放該對象。
看看Advanced Memory Management Programming Guide
你一定不會放棄對象的所有權不屬於您
你是不是對象的所有者,所以你不鬆開。
您成爲通過保持,複製或創建(INIT/ALLOC)的對象的所有者。只有這樣你纔是對象的所有者(你)之一,並且在你完成對象時需要釋放它。更多信息檢查 Cocoa core competencies - Memory Management
我希望這可以解釋爲什麼你不必釋放對象。
HTTPS閱讀developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW8這裏大公說你需要releas它(在iOS版) – meronix
是的,它還說「在ARC之前,用於管理nib對象的規則與上面描述的不同,您如何管理對象取決於平臺和使用的內存模型。無論您開發哪種平臺,都應該使用Objective-C聲明的屬性功能來定義網點「,因此爲了確保您正確地使用它,您應該將其用作屬性。 – ophychius
是的,我同意並始終更喜歡使用財產,但「學術」問題是:如果我們不使用屬性(聲明保留或分配),這是Xcode默認使用的屬性?我想,如果它被分配,我們試圖釋放它,我們得到一個殭屍崩潰......但這不會發生......所以默認行爲應該是「保留」......說當然它更好(更快,更容易)使用屬性和deallc self.myProperty =零; – meronix
- 1. Objective-c要發佈的IBOutlet對象?
- 2. UIButton很需要IBOutlet嗎?
- 3. 需要從Android發佈JSON對象
- 4. 發佈iVar IBOutlet vs Property IBOutlet
- 5. 我是否需要發佈COM Interop對象的內部對象?
- 6. 何時發佈IBOutlet?
- 7. 我的店需要發佈嗎?
- 8. 使用ARC,需要發佈CGMutablePathRefs嗎?
- 9. 發佈操作需要Rails授權嗎?
- 10. 我需要在ARC下發布CGColorSpaceRef嗎?
- 11. initWithNibName需要發佈
- 12. 引用對象需要返回嗎?
- 13. 我需要一個服務對象嗎?
- 14. 我需要escape_string爲json_encoded對象嗎?
- 15. JavaScript對象需要封裝嗎?
- 16. Memory/Obj-C正確的對象釋放。哪些需要發佈?
- 17. 是removeFromSuperview發佈的對象嗎?
- 18. 自釋放,發佈實際對象嗎?
- 19. Git發佈需要返回發佈
- 20. 發佈對象是否有必要?
- 21. 發佈對象?
- 22. 需要發佈UIWebView委託?
- 23. 這裏需要揮發嗎?
- 24. 發佈COM對象
- 25. 發佈Com對象
- 26. 要重置遊戲,我需要動態添加對象嗎?
- 27. 對象需要在對象C類
- 28. 在面向對象的編程中,我們需要抽象嗎?
- 29. 需要的對象:VBA Excel
- 30. 需要幫助HttpWebRequest對象
我的問題是,..如果不打算給做財產爲目的......仍然需要釋放的dealloc塊IBOutlet中釋放對象? – SachinVsSachin