- Похоже, что temp является переменной экземпляра для этого класса
- Убедитесь, что вы выполнили отпуск, когда закончите или перед тем, как использовать его снова
Попробуйте сделатьследующий
[temp release];
temp=[[Expenseentry alloc]init];
temp.ID=[NSString stringWithFormat:@"%d",primaryKey];
Другой вариант - освободить после того, как вы поработали с ним внутри цикла while (sqlite3_step)
while(sqlite3_step(selectstmt) == SQLITE_ROW) {
...
temp=[[Expenseentry alloc]init];
temp.ID=[NSString stringWithFormat:@"%d",primaryKey];
... //Use temp
[temp release];
temp = nil; //Best practice to set it to nil
Если строка temp.ID утечка, вам нужнозагляните в класс Expenseentry, чтобы убедиться, что вы делаете там правильное управление памятью.
Редактировать: теперь я вижу оставшуюся часть вашего кода, отправленную
[arrreturn addObject:temp];
//[temp release];
//if i uncomment this app crashes
Причина, по которой он, вероятно, дает сбой, заключается вЯ сказал прежде, что убедитесь, что вы установили его на ноль после освобождения
Редактировать 2: Вы повторно используете тот же объект внутри цикла while. Вы также захотите переместить временное распределение в цикл while или иначе каждый объект вэтот массив будет указывать на тот же объект.Я не уверен, что ваша цель с кодом, но взгляните на следующий код.
while(i>5)
{
temp=[[Expenseentry alloc]init];
temp.ID=[NSString stringWithFormat:@"%d",primaryKey];
@try
{
NSString *s=[[NSString alloc]initWithFormat:@"%f",sqlite3_column_double(selectstmt, 1)];
temp.amount=s;
[s release];
[arrreturn addObject:temp];
}
@catch(id ex )
{
printf("ooooopssss exception ");
}
[temp release];
temp = nil;
i++;
}