【问题标题】:Objective-C NSString Transformable attribute memory leakObjective-C NSString 可转换属性内存泄漏
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-09-05
      • 2015-06-20
      • 2020-09-15
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 2011-10-31
      相关资源
      最近更新 更多