Это довольно просто. Если у вас нет объекта, он исчезнет в какой-то неопределенной точке в будущем. В вашем случае «неопределенный» момент - это когда пул авто-выпуска истощается, что в обычном случае находится в конце обработки текущего события.
Если вы хотите, чтобы объект висел рядом, вам нужно владеть им. Правила управления памятью, на которые ссылается jer, точно скажут вам, как вы получаете право собственности на объект. В этом случае вам нужно сохранить объект. Вы должны, конечно, выпустить его позже, когда вы покончили с этим.
Считает ваш комментарий ответом Мэтта. Ваш код такой:
for (NSString * date in dateList)
{
[historyList addObject:[[BIUtility historyForDate:date] retain]];
}
и
+ (NSArray *) historyForDate:(NSString *)date
{
NSMutableArray * ret = [[[NSMutableArray alloc] init] autorelease];
}
Первое, что вам нужно знать, - это то, что коллекции сохраняют своих членов, так что фактически ваше сохранение historyForDate не является необходимым. Вы не хотите владеть этим объектом, как делает historyList. Если он исчезает, возможно, это связано с тем, что сам historyList был освобожден (потому что он вам не принадлежит) или равен nil.
Кстати, historyForDate: ничего не делает с датой. Это правильно?