Если вы используете конструктор, который выдает объект, не выпущенный автоматически, вам не нужно беспокоиться об этом.Но в противном случае вам нужно использовать пулы с автоматическим выпуском.
Это немедленно даст вам EXC_BAD_ACCESS, если и только если array
не сохранено сеттером, так как его счетчик хранения равен 0 на release
и он немедленно освобождается:
NSArray *anArray = [[NSArray alloc] init];
self.array = anArray;
[anArray release];
NSLog(@"Here's my array: %@", self.array); // EXC_BAD_ACCESS if array not retained
Принимая во внимание, что это не вызовет никаких ошибок, даже если self.array
станет мусором позже, как только пул автоматического выпуска:
self.array = [NSArray array];
NSLog(@"Here's my array: %@", self.array); // No error for now
Если вам нужно использовать вспомогательный конструктор, просто оберните присвоение в пул авто-релиза:
NSAutoreleasePool *testPool = [[NSAutoreleasePool alloc] init];
self.array = [NSArray array];
[testPool drain];
NSLog(@"Here's my array: %@", self.array); // EXC_BAD_ACCESS if array not retained
Таким образом, вы снова получите EXC_BAD_ACCESS, если array
не сохраняется.сеттером.