【发布时间】:2010-08-21 19:38:23
【问题描述】:
我对分配和释放对象有疑问:
如果我有这样的代码:
MyObject *object = [[MyObject alloc] init];
NSMutableString *string = [[NSMutableString alloc]initWithString:@"bla"];
object.myString = string;
NSLog(@"retain count: %d",[object.myString retainCount]); //gives me 2
[string release];
NSLog(@"retain count: %d",[object.myString retainCount]); //gives me 1
比我拥有的正是我想要的。我只需要一个参考,我保留计数 1
但是
如果我使用
object.myString = [[NSMutableString alloc]initWithString:@"bla"];
我的财产如下所示:
@property (nonatomic,retain) NSMutableString *myString;
一个alloc,一个带有retain的setter方法给我作为retain count 2
如果我在辞职后释放对象,应用程序就会崩溃。不知道为什么?
那么,我是否必须始终创建一个带有临时引用的对象,而不是分配给真正的引用并像第一个代码一样释放临时引用?
或者还有其他方法吗?
【问题讨论】:
-
您遗漏了有关如何释放 myString 以及发生崩溃的位置的详细信息,因此很难确切地说出了什么问题。从理论上讲,调用
[object.myString release]之类的东西应该没问题,但是 object.myString 总是有可能没有返回原始对象。如果您想找出原因,请使用全局断点来捕获导致您的应用程序崩溃的异常。设置“操作方法”的说明不应该太难找到。
标签: objective-c