Objective-C NSString可转换属性内存泄漏

时间:2010-07-17 11:17:18

标签: iphone memory-management core-data memory-leaks nsstring

我有一个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被调用两次)

1 个答案:

答案 0 :(得分:0)

答案很简单,该类不是NSManagedObject的子类,因此需要一个适当的dealloc方法来释放属性。笨拙的我没有及时注意到