請注意下面的註釋[printvolfirst release];
一行。如果我不評論它,程序崩潰。我無法弄清楚爲什麼。 printvolfirst
變量除了在這裏看到的代碼行之外不在其他任何地方使用。在它被分配到後,我完成了它。那麼爲什麼不發佈它呢?釋放我完成的NSString導致崩潰
vol = vol/1000000;
NSNumberFormatter * format = [[NSNumberFormatter alloc] init] ;
[format setPositiveFormat:@"#.#"];
NSString * printvolfirst = [[NSString alloc]init];
printvolfirst = [format stringFromNumber:[NSNumber numberWithFloat:vol]];
NSString * printvol = [[NSString alloc] initWithFormat: @"%@M", printvolfirst];
self.Pop.vol.text = printvol;
[printvol release];
//[printvolfirst release];
[format release];
有趣。我認爲我「擁有」這個變量,如果我直接使用alloc/init,並且我擁有它直到我釋放它。不對?如果我想保留printvolfirst而不是autorelease,我該怎麼做? – johnbakers 2011-06-07 19:50:28
你可以通過發送'retain'消息來保留它。確實,當你「分配」,「保留」或「複製」一個對象時,你擁有它。但是你正在做的是分配一個對象,然後將它設置爲一個新對象,立即引入內存泄漏。如果啓用分析儀,它應該完全告訴你你做錯了什麼。 :) – 2011-06-07 19:51:42
@andrewjs:你缺少的關鍵是你不擁有*變量* - 你擁有*對象*。您最初爲該變量分配一個空字符串(您自己擁有),然後將該字符串丟棄並分配'stringFromNumber:'(您不擁有)的結果。這是兩個不同的對象。將它們存儲在同一個變量中並不會改變它們的內存管理要求。 – Chuck 2011-06-07 20:15:33