【发布时间】:2011-03-17 07:43:44
【问题描述】:
我有一个 CoreData NSManagedObject 子类 TextNarration,它有一个 NSString 类型的属性 textURI。该类以这种方式实现了 NSCoding 协议方法:initWithCoder 和 encodeWithCoder:
- (id) initWithCoder: (NSCoder *)coder
{
if (self = [super init])
{
self.textURI = [coder decodeObjectForKey:@"textURI"];
}
return self;
}
- (void) encodeWithCoder: (NSCoder *)coder
{
[coder encodeObject:textURI forKey:@"textURI"];
}
当我创建一个新实例时,我会这样做:
TextNarration * textNarr = [[TextNarration alloc] init];
NSString * tURI = [[NSString alloc] initWithString:[dictionaryAction objectForKey:@"narrationURI"]];
//NSString * tURI = [[NSString alloc] initWithString:@"aspa"];
textNarr.textURI = tURI;
[action_collected addObject:textNarr];
[tURI release];
[textNarr release];
action_collected 是一个 NSArray,我将把它作为可转换属性放入我的模型中的实体中,[dictionaryAction objectForKey:@"narrationURI"] 是一个之前在另一个上下文中自动释放的 NSString。
如果使用注释行,我怎么会在该字符串上出现内存泄漏而没有?
查看工具,似乎自动释放的字符串从 initWithString 接收到 retain(并且 encodeWithCoder 被调用了两次)
【问题讨论】:
标签: iphone memory-management core-data memory-leaks nsstring