代码之家  ›  专栏  ›  技术社区  ›  rano

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

  •  0
  • rano  · 技术社区  · 15 年前

    我有一个coredatansmanagedObject子类,text叙事,它有一个nsstring,texturei类型的属性。该类实现nscoding协议方法:initwitcoder和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。 我怎么会在那个字符串上出现内存泄漏,而如果a使用注释行,则不会出现内存泄漏? 查看仪器时,自动释放的字符串似乎接收到 retain 从initwithstring(和 encodeWithCoder 两次呼叫)

    1 回复  |  直到 15 年前
        1
  •  0
  •   rano    15 年前

    答案很简单,该类不是nsmanagedObject的子类,因此它需要一个适当的释放属性的dealLoc方法。我没及时注意到,真是笨手笨脚