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