Вот некоторые правила:
всякий раз, когда вы звоните alloc
, вы должны в конечном итоге позвонить release
для каждого retain
, у вас должно быть release
Когда вы добавляете объект в массив, он вызывает retain для этого объекта.Если вы не отпустите указатель на этот объект, это будет утечка.Когда вы освобождаете массив, он будет вызывать release для всех объектов, которые он содержит, поскольку он вызывал retain ранее.
NSObject *object = [[NSObject alloc] init];
// object has retain count 1
NSArray *array = [[NSArray arrayWithObjects:object] retain];
// array is autoreleased but has a retain, so has retain count 1
// object now has retain count 2
[object release];
// object now has retain count 1
[array release];
// array is now set to autorelease,
// once that happens, array will be sent dealloc and object will be released
Следовательно, утечки памяти нет.