NSString和retainCount问题

时间:2010-08-11 20:39:59

标签: iphone xcode nsstring retaincount

我在接口部分声明了一个NSString:

  

@property(nonatomic,retain)NSString * filePath;

在viewDidLoad中,我给它一个值,当我尝试从我的一个自定义方法调用它时,它第一次工作,但在第二次它压缩。在我看来,filePath在第一次调用时被自动释放。

我尝试了一种不同的方法,在我的方法中,我做了类似的事情:

  

NSString * path = [[[NSString init] alloc] autorelease];       path = [filePath copy];

这次似乎有效,但在检查路径的retainCount时它会不断增加。 第一次调用该方法时,retainCount为4,但第二次为2,第三次为3,依此类推。

好的,我理解filePath会增加,因为[copy]但是为什么路径变量呢? 为什么在第一种情况下它不起作用?

1 个答案:

答案 0 :(得分:0)

您没有显示所有代码,因此很难说出任何结论。但是:

NSString *path = [[[NSString init] alloc] autorelease];
path = [filePath copy];

没有意义:首先分配NSString,让path指向它。然后你让路径指向别的东西。 NSString未使用(但将通过自动释放进行清理)。

我看到你只是通过名字访问filePath,而不是通过getter / setter。如果您使用self.filePath,例如

self.filePath = [NSString stringWithFormat:@"..."]; // or any other string

然后,设置者正确处理保留/释放业务。准确地说,filePath = ...self.filePath = ...之间的区别在于后者保留您指定的对象。

你真的不应该看看retainCount来调试东西,如果你不是很自信你知道在可可罩下发生了什么。