0

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

@property (nonatomic, 保留) NSString *filePath;

在 viewDidLoad 我给它一个值,当我试图从我的一个自定义方法中调用它时,它第一次工作,但第二次它崩溃了。在我看来,filePath 在第一次通话期间自动释放。

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

NSString *path = [[[NSString init] alloc] autorelease]; path = [文件路径副本];

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

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

4

1 回答 1

0

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

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

没有意义:首先你分配一个 NSString,然后让path指向它。然后你让 path 指向别的东西。NSString 没有被使用(但会被自动释放清除)。

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

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

然后由 setter 妥善处理保留/释放业务。准确地说, 和 之间的区别在于filePath = ...后者self.filePath = ...保留您正在分配的对象。

如果您不太确定自己知道可可引擎下发生的事情,那么您真的不应该查看retainCount 来调试事物。

于 2010-08-11T20:51:09.170 回答