我們應該採取哪些步驟 - 最佳實踐 - 防止使用@property
和@synthesize
時出現泄漏?使用@property和@synthesize時防止泄漏
0
A
回答
3
請注意你的標準事情,讓你回到保留的對象,方法與分配,複製或新的。當您將這些與您的財產一起調用時,您可能會無意中造成泄漏。
在你的界面,你有
@property (nonatomic, retain) NSArray *someArray;
而在你執行你有
@synthesize someArray;
再後來你所使用的財產
self.someArray = [[NSArray alloc] init];
你的對象現在有一個保留從使用self.someArray = 1和從alloc中的一個計數爲2。 self.someArray =調用你的setter,它和 - (void)setSomeArray相同:(NSArray)someArray;這是用合成爲你創造的。由於您在@property聲明中使用了retain關鍵字,這將包含一個保留。
我傾向於避免這兩種方式之一。
要麼使用自動釋放初始化器
self.someArray = [NSArray array];
或
self.someArray = [[[NSArray alloc] init] autorelease];
,或者使用一個臨時變量
NSArray tempArray = [[NSArray alloc] init];
self.someArray = tempArray;
[tempArray release];
所有這些方法你會留下你的self.someArray對象保留數爲1,您可以在dealloc中處理。
- (void)dealloc {
[someArray release];
[super dealloc];
}
0
有一件事幫了我很多忙,就是用保留類型檢查頭文件的屬性定義,然後確保在-dealloc方法中有每個版本的發行版。
對於在對象生命週期中對屬性的各種賦值,自動合成的設置者應該照顧它。
相關問題
- 1. IOS @property,@synthesize內存泄漏
- 2. Objective-C:@property和@synthesize和內存泄漏
- 3. 使用instantiateViewController時防止內存泄漏
- 4. @property和@synthesize
- 5. 何時需要@property和@synthesize?
- 6. 關於@property和@synthesize
- 7. @property @synthesize
- 8. 使用委託構造,防止泄漏
- 9. 使用cfimage和cfxml時防止內存泄漏?
- 10. iPhone開發 - 防止泄漏
- 11. 防止泄漏過程
- 12. 使用@property和@synthesize的任何錯誤
- 13. 關於產品@property和@synthesize
- 14. @property setter中的泄漏
- 15. 使用@property和@synthesize時得到不正確的值
- 16. 什麼時候你必須在iPhone SDK中使用@property和@synthesize?
- 17. 如何防止這些內存泄漏?
- 18. ProgressDialog:如何防止泄漏窗口
- 19. 如何防止泄漏抽象?
- 20. 防止我的內存泄漏
- 21. 如何防止石英內存泄漏
- 22. 如何防止內存泄漏
- 23. @property和@synthesize和內存錯誤
- 24. 這是否使用C指針可以防止泄漏內存?
- 25. 如何防止JobService使用的AsyncTask中的上下文泄漏
- 26. @property和@synthesize有什麼意義?
- 27. @property和@synthesize的工作方式如何?
- 28. @property和@synthesize有什麼區別?
- 29. @property和@synthesize:爲什麼這兩個?
- 30. @property @synthesize @dynamic差異在Xcode