У меня есть подкласс 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
вызывается дважды)