timeslot = [NSArray arrayWithObjects:@"7:00-8:00", @"8:00-9:00", @"9:00-10:00", @"10:00-11:00", @"11:00-12:00", @"12:00-13:00", @"13:00-14:00", @"14:00-15:00", @"15:00-16:00", @"16:00-17:00", nil];
Эта строка должна иметь -retain
.
timeslot = [[NSArray arrayWithObjects:@"7:00-8:00", @"8:00-9:00", @"9:00-10:00", @"10:00-11:00", @"11:00-12:00", @"12:00-13:00", @"13:00-14:00", @"14:00-15:00", @"15:00-16:00", @"16:00-17:00", nil] retain];
UPD -autorelease
не очень хорошая идея.Вы можете только автоматически выпустить / выпустить объекты, которые у вас есть.Когда вы используете -arrayWithObjects
, ваш объект принадлежит локальному AutoreleasePool.
Вот как это работает в простых терминах.Каждый раз, когда вы создаете объект без -alloc
или -copy
методов, он автоматически высвобождается, что в данном случае означает, что он будет иметь счетчик ссылок 1 до конца области сообщения.С технической точки зрения бизнес пула автоматических выпусков асинхронный , поэтому может произойти сбой или нет, но вы должны предположить, что этот объект в данный момент является зомби.Поэтому вы должны использовать -retain
, чтобы сохранить этот объект для использования другим методом.если вы использовали явно -retain
, вы должны использовать -release
явно, когда закончите с этим объектом.Так почему бы не использовать [[NSArray alloc] initWithObjects:...]
прямо сейчас.это просто более уместно здесь.Здесь вы также можете использовать сохраненное свойство, но вы не хотите показывать внутреннюю переменную, когда у вас ее тоже нет