new
on NSObject
- это метод класса, а не метод экземпляра, как у вас. Кроме того, я не понимаю, почему вы перегружаете new
. Чаще всего перегрузка init
происходит примерно так:
- (id)init {
if ((self = [super init])) {
waffleArray = [[NSMutableArray alloc] initWithCapacity:kCellCount];
for (int i = 0; i < kCellCount; i++) {
WaffleCell * cell = [WaffleCell new];
[waffleArray addObject:cell];
}
}
return self;
}
Что касается finalize
, вам действительно не нужно этого делать. Вот что Apple говорит об этом:
Сборщик мусора вызывает этот метод на приемнике перед удалением используемой памяти. Когда сборка мусора включена, этот метод вызывается вместо dealloc.
С включенным ARC вам не нужно ничего делать, и поскольку сборщик мусора все равно не будет работать, finalize
не будет вызван в любом случае. ARC автоматически сгенерирует код, который будет release
waffleArray
в dealloc
для вас, что достаточно для правильного управления памятью в этом случае, потому что счетчик хранения waffleArray
затем упадет до 0, будет освобожден сам, что будет идти и освободить объекты в массиве.