我在接口部分声明了一个NSString:
@property (非原子的,保留) NSString *filePath;
在viewDidLoad中,我给出了一个值,当我试图从我的自定义方法中调用它时,它第一次工作,但在第二次调用时,它就崩溃了。在我看来,filePath是在第一次调用时自动发布的。
我尝试了一种不同的方法,在我的方法中,我做了这样的事情:
NSString *path =[NSString init alloc]自动释放;路径= filePath拷贝;
这一次似乎很有效,但是当检查路径的retainCount时,它会不断增加。第一次调用该方法时,retainCount为4,而第二次调用为2,第三次为3,依此类推。
好的,我知道filePath在增加,因为复制,但是为什么路径变量也在增加呢?为什么在第一种情况下它不起作用?
发布于 2010-08-11 20:51:09
你没有显示所有的代码,所以很难说出任何结论。然而:
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然后,由setter正确地处理保留/发布业务。准确地说,filePath = ...和self.filePath = ...之间的区别是,后者将保留您要分配的对象。
如果你不太自信的话,你真的不应该看retainCount来调试东西,如果你不太自信的话,你就知道可可罩下发生了什么。
https://stackoverflow.com/questions/3462619
复制相似问题