【发布时间】:2010-09-07 02:06:33
【问题描述】:
Leaks 工具告诉我,当我在 initWithCoder 中使用 decodeObjectForKey 时出现内存泄漏。例如:
Class.h
{
MyObject *myObject;
}
@property (nonatomic, retain) MyObject *myObject;
Class.m
@synthesize myObject
-(void)dealloc{
[myObject release];
[super release];
}
-(id)initWithCoder:(NSCoder *)decoder{
if (self = [super init]{
self.myObject = [decoder decodeObjectForKey:@"MyObject"];
}
return self;
}
cmets 中的每个请求:
-(void)encodeWithCoder:(NSCoder *)encoder{
[encoder encodeObject:myObject forKey:@"MyObject"];
}
Leaks 在线报告 NSCFString 类型的泄漏;
self.myObject = [decoder decodeObjectForKey:@"MyObject];
据我了解,decodeObjectForKey 返回一个自动释放的对象。由于我立即将该值分配给 myObject 属性,该属性在属性定义中指定为(无毒,保留),因此我通过 myObject 属性的 setter 方法保留了自动释放的对象。然后在 dealloc 方法中释放 myObject。如果我正确理解了顺序,我不明白泄漏在哪里。还有为什么当类型为 MYObject 时会报告为 NSCFString?
任何想法都将不胜感激,包括我的上述假设是否正确。
【问题讨论】:
-
下次请格式化你的代码:)
-
那我想看看你的 encodeObject:forKey: 方法实现
-
新网站,对格式感到抱歉。添加了 encodeObject: 每个请求的方法
标签: iphone