我在接口部分声明了一个NSString:
@property(nonatomic,retain)NSString * filePath;
在viewDidLoad中,我给它一个值,当我尝试从我的一个自定义方法调用它时,它第一次工作,但在第二次它压缩。在我看来,filePath在第一次调用时被自动释放。
我尝试了一种不同的方法,在我的方法中,我做了类似的事情:
NSString * path = [[[NSString init] alloc] autorelease]; path = [filePath copy];
这次似乎有效,但在检查路径的retainCount时它会不断增加。 第一次调用该方法时,retainCount为4,但第二次为2,第三次为3,依此类推。
好的,我理解filePath会增加,因为[copy]但是为什么路径变量呢? 为什么在第一种情况下它不起作用?
答案 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来调试东西,如果你不是很自信你知道在可可罩下发生了什么。