嗨,大家好,我開始玩Objective-C,我想確保我的內存/屬性正確。開始Objective-C,內存泄漏問題
假設以下代碼:
@interface Rectangle : NSObject
{
Vector2* origin;
//[...]
}
Rectangle* myRect = [[Rectangle alloc] init];
myRect.origin.x = 100.0f;
[myRect print];
myRect.origin = [[Vector2 alloc] init]; //hummm.. 2 concerns here.
關注1:
假設原點標準(分配)中合成屬性:
不myRect先前原點ref計數變爲0自動當分配新的Vector2和GC後會照顧它?或者我必須在屬性中明確地調用release?
關注2:
假設原點將是一個「保留」屬性:(順便說一句:希望聲明一個合成保留屬性時種代碼被自動生成,是可能的?)
-(void) setOrigin: (Vector2*)newOrigin {
[newOrigin retain];
[origin release]
origin = newOrigin;
}
myRect.origin = [[Vector2 alloc] init]
會不會造成雙重引用計數增量,那麼需要relea:做的時候
然後se被稱爲兩次以避免泄漏?當你使用庫/其他人的代碼來避免這樣的問題時,你們是否依靠良好的文檔編碼(瞭解它是一個保留屬性),還是有一些更安全的alloc/init對象?
感謝提示!
只是爲了澄清 - 「原產地」應該是'Vector2 *'類型的,對嗎? – 2010-06-04 06:45:15
關於通過合成屬性生成什麼樣的代碼,您發佈的內容是一個選項,並且是屬性和垃圾回收之前使用的選項。還有其他的變化。而且,在原子屬性中,這些語句會被某種互斥體括起來。 – JeremyP 2010-06-04 07:33:50