2011-04-10 85 views
0
在PC級

我有的NSString與副本財產

@property (nonatomic, copy) NSString * imageURL; 

,並在PC中的dealloc我有[imageURL release];這應該永遠不會導致另一個類崩潰

我打電話

pc.imageURL = url; 

我想問一下,如果我拿這個確定,因爲我的應用程序有奇怪的崩潰

以前我總是做

pc.imageURL = [[NSString alloc] initWithString:url]; 

謝謝

+0

你有沒有試過調試它來找出*爲什麼*和*哪裏*它崩潰? – 2011-04-10 10:16:53

回答

0

你在做什麼是正確的。但是,你做了什麼之前是錯誤的,因爲

[[NSString alloc] initWithString:url]; 

保留了新的字符串,但它從來沒有得到釋放。

我想你已經在release內建了一個你不需要的,因爲你之前試圖避免內存泄漏。

+0

感謝您的回覆,但我不明白最後一句的含義:「我認爲您已經建立了一個您不需要的版本,因爲您之前嘗試避免內存泄漏。」我認爲如果我[[NSString alloc] initWithString:url],比默認內容 – 2011-04-10 10:33:59

+1

[[NString alloc] initWithString:url]自動調用不會autorelease。 [NSString stringWithString:url]會自動釋放。如果你分配它,你擁有它並且必須釋放它。 – 2011-04-10 13:18:07

+0

@彼得:基本上特里已經說過了。我相信你已經添加了一個不必要的'-release',因爲你通過做'[[NSString alloc] initWithString:url];'錯誤地保留了你的字符串。你必須弄清楚你在哪裏釋放字符串,你不應該。 – 2011-04-10 14:13:21