Objective-C NSString Преобразованная утечка памяти атрибута - PullRequest
0 голосов
/ 17 июля 2010

У меня есть подкласс 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, ранее автоматически выпущенная в другом контексте.Почему я получаю утечку памяти в этой строке и ничего, если вместо этого использовать закомментированную строку?Глядя на инструменты, кажется, что автоматически выпущенная строка получает retain от initWithString (и encodeWithCoder вызывается дважды)

1 Ответ

0 голосов
/ 17 июля 2010

Ответ прост: этот класс не является подклассом NSManagedObject и, следовательно, требует соответствующего метода dealloc, который освобождает атрибуты. Коряво меня за то, что не заметил вовремя

...