首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSString与retainCount问题

NSString与retainCount问题
EN

Stack Overflow用户
提问于 2010-08-11 20:39:58
回答 1查看 208关注 0票数 0

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

@property (非原子的,保留) NSString *filePath;

在viewDidLoad中,我给出了一个值,当我试图从我的自定义方法中调用它时,它第一次工作,但在第二次调用时,它就崩溃了。在我看来,filePath是在第一次调用时自动发布的。

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

NSString *path =[NSString init alloc]自动释放;路径= filePath拷贝;

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

好的,我知道filePath在增加,因为复制,但是为什么路径变量也在增加呢?为什么在第一种情况下它不起作用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-11 20:51:09

你没有显示所有的代码,所以很难说出任何结论。然而:

代码语言:javascript
复制
NSString *path = [[[NSString init] alloc] autorelease];
path = [filePath copy];

没有意义:首先分配一个NSString,然后让path指向它。然后你让路径指向其他的东西。NSString不被使用(但是将由自动发布来清理)。

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

代码语言:javascript
复制
self.filePath = [NSString stringWithFormat:@"..."]; // or any other string

然后,由setter正确地处理保留/发布业务。准确地说,filePath = ...self.filePath = ...之间的区别是,后者将保留您要分配的对象。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3462619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档