【发布时间】:2012-05-09 23:08:44
【问题描述】:
我在 initWithCoder 方法中遇到了漏洞。
unarchiveObjectWithData:cacheData 会返回一个自动释放的对象吗? unarchiveObjectWithData:cacheData 返回的对象由谁负责释放?
@implementation MyObject
@synthesize something = _something;
- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init])
{
self.something = [aDecoder decodeObjectForKey:@"something"];
}
}
- (void)dealloc
{
self.something = nil;
[super dealloc];
}
@end
这是我从文件中读取对象的地方
MyObject *myObject = [NSKeyedUnarchiver unarchiveObjectWithData:cacheData];
【问题讨论】:
-
之前已经讨论过,但不鼓励在
init和dealloc期间使用访问器方法,因为它可能会产生意想不到的副作用。在像上面这样的微不足道的情况下,这不是问题,但在复杂的初始化、通过 KVO 观察或复杂的对象层次结构中,它可能会导致很多意想不到的副作用。
标签: objective-c ios nskeyedarchiver nscoding