Знайте о своих стандартных вещах, которые возвращают вам сохраненные объекты, методы с помощью alloc, copy или new. Когда вы вызываете их вместе со своей собственностью, вы можете непреднамеренно создать утечку.
В вашем интерфейсе у вас есть
@property (nonatomic, retain) NSArray *someArray;
А в вашей реализации у вас есть
@synthesize someArray;
Затем вы используете свойство
self.someArray = [[NSArray alloc] init];
у вашего объекта теперь есть счетчик сохранения 2. один от использования self.someArray = и один от alloc. self.someArray = вызывает ваш установщик, который совпадает с - (void) setSomeArray: (NSArray) someArray; который создан для вас с синтезом. Это будет содержать retain из-за ключевого слова retain, которое вы использовали в объявлении @property.
Я склонен избегать этого одним из двух способов.
либо с использованием автоматически выпущенного инициализатора
self.someArray = [NSArray array];
или
self.someArray = [[[NSArray alloc] init] autorelease];
или использовать временную переменную
NSArray tempArray = [[NSArray alloc] init];
self.someArray = tempArray;
[tempArray release];
все эти методы оставят вас с вашим объектом self.someArray, имеющим количество сохраняемых единиц, которое вы можете позаботиться в dealloc.
- (void)dealloc {
[someArray release];
[super dealloc];
}