它是安全的在Objective-C編寫的「self.propery = [[SomeClass alloc] init];」泄漏內存?
self.propery = [[SomeClass alloc] init];
代替
SomeClass *tmp = [[SomeClass alloc] init];
self.property = tmp;
[tmp release];
或將第一種形式的內存泄漏?
它是安全的在Objective-C編寫的「self.propery = [[SomeClass alloc] init];」泄漏內存?
self.propery = [[SomeClass alloc] init];
代替
SomeClass *tmp = [[SomeClass alloc] init];
self.property = tmp;
[tmp release];
或將第一種形式的內存泄漏?
第一個示例泄漏,除非您提供自定義屬性設置器。您可以使用:
self.propery = [[[SomeClass alloc] init] autorelease];
取而代之。
謝謝。在NSAutoreleasePool發佈之前不會保留內存(即默認情況下,直到我退出應用程序)? – giorgiga 2010-08-23 17:08:24
我的理解是,autorelease池通常會在每次執行「運行循環」後(應用程序退出之前)釋放。假設你正在編寫一個Cocoa或Cocoa Touch應用程序。 – 2010-08-23 19:05:32
無論您的財產是否定義爲保留,複製或分配,它都沒有什麼差別。當您使用[[SomeClass alloc] init]
創建一個類的本地實例時,您有責任在它創建的範圍內發佈它。
凱文的回答是正確的。如果你不想創建,設置,釋放 - 你可以使用autorelease。主要的自動釋放池不時耗盡,你不會在應用程序的整個生命週期中使用該內存。
值得注意的是,autorelease池的不可預測性意味着您無法確定何時會釋放內存。如果在像iPhone這樣的內存受限的平臺上工作,您應該避免在必要的地方使用autorelease。
向我們顯示「屬性」的屬性聲明。這是'@ property'行。 – jer 2010-08-23 16:39:26