Нет, если только при нескольких конкретных обстоятельствах, и давайте выясним, почему.Предполагая, что это в главном потоке, перед вызовом вашего селектора, система создаст для вас NSAutoreleasePool
, перед вашей функцией, а затем после.
Так что, если при расширении ваш код выглядит следующим образом:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Test"
inManagedObjectContext:[self managedObjectContext]];
for (int i = 0; i < 10; i++)
{
Test *test = [[[Test alloc] initWithEntity:entity insertIntoManagedObjectContext:[self managedObjectContext]] autorelease];
test.text = @"Text";
test.index = [NSNumber numberWithInt:i];
}
[self saveContext];
[pool drain];
entity
будет сброшено сразу после выхода из функции, то есть после [self saveContext]
.ARC решит многие из этих проблем, если вы решите включить его.
Предупреждение!
Обратите внимание, что это не тот код, который использует Apple, пул сливается только каждый кадр,не каждый метод, но когда память истощается, пул автоматического освобождения будет автоматически истощаться, поэтому, если у вашего устройства заканчивается память, то теоретически это может привести к преждевременному освобождению объекта, но если это произойдет, у вас есть другие проблемы сбеспокоиться о.
Также обратите внимание, что при работе с потоками вы должны создать собственный пул автоматического выпуска, система НЕ сделает это за вас.Это не то, что вы делаете здесь, но если такая ситуация возникает, не забудьте обернуть ваш селектор в блок @autorelease
.