我声明了一个强大的属性:
@property (strong) NSString *message;
我将消息设置为:
self.message = [NSString stringWithFormat:@"xxxx %@",sth];
但它会因消息而崩溃:
*** -[CFString retain]:消息发送到已释放实例 0x1015ea790
即使我更改了属性:strong-> copy,它仍然崩溃。现在我使用以下方法修复它:
self.message = [[NSString stringWithFormat:@"xxxx %@",sth] copy];
但是我仍然无法理解它,因为我总是在 iOS 中以相同的方式编写它。
顺便说一句:代码是可可的,无弧
更新1:
1 我添加了@synthesize message;
2 sth是一个例子,真正的代码是
self.message = [NSString stringWithFormat:@"xxxx %@", [[NSDate date] description]];
3 我记得 strong/copy 属性的默认实现可以是:
- (void)setMessage:(NSString*)newMsg
{
if (message != newMsg)
{
[newMsg retain];
[message release];
message = newMsg;
}
}
所以我认为属性综合将为我添加副本/保留。这就是让我感到困惑的原因!