2010-07-17 2 views
0

У меня есть подкласс CoreData NSManagedObject, TextNarration, который имеет атрибут типа NSString, textURI. Этот класс реализует методы протокола NSCoding: initWithCoder и encodeWithCoder таким образом:Objective-C NSString Преобразование утечки памяти атрибута

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

ответ

0

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

Смежные вопросы