2011-04-10 46 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