Я пытаюсь выполнить некоторые базовые операции поиска таблиц из sqlite, и я все еще спотыкаюсь о некоторой утечке памяти, которую не могу понять, тем более что она появляется только с одной из двух эквивалентных строк.
То, что я делаю, просто:
-Создание объекта (категории) для хранения строки моего sqlite DB
-Имеет метод, который запрашивает sqlite и возвращает массив этих объектов
Я поместил весь код здесь (немного упростили, чтобы упростить, но у меня утечка памяти с этим самым кодом).
category.h:
@interface Category : NSObject {
int catId;
NSString *description;
int order;
NSString *iconName;
}
@property(nonatomic, readwrite, assign) int catId;
@property(nonatomic, retain) NSString *description;
@property(nonatomic, readwrite, assign) int order;
@property(nonatomic, retain) NSString *iconName;
@end
category.m:
#import "Category.h"
@implementation Category
@synthesize catId;
@synthesize description;
@synthesize order;
@synthesize iconName;
@end
Метод получения массива:
-(NSMutableArray *)getAll {
NSString *query = "select id, description, catorder, image from category order by catorder";
sqlite3_stmt *statement;
NSMutableArray *categoryArray = [[NSMutableArray alloc] init];
if (sqlite3_prepare_v2([[Database sharedDatabase] instance], [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
int dbId = sqlite3_column_int(statement, 0);
char *dbDescription = (char *)sqlite3_column_text(statement, 1);
int dbOrder = sqlite3_column_int(statement, 2);
char *dbIcon = (char *)sqlite3_column_text(statement, 3);
NSString *desc = [[NSString alloc] initWithUTF8String:dbDescription];
NSString *icon = [[NSString alloc] initWithUTF8String:dbIcon];
Category *category = [[Category alloc] init];
category.catId=dbId;
category.description = desc;
//category.description = @"Test";
category.order = dbOrder;
category.iconName = icon;
//category.icon = @"test.png";
[desc release];
[icon release];
[categoryArray addObject:category];
[category release];
}
sqlite3_finalize(statement);
}
[categoryArray autorelease];
return categoryArray;
}
Эта строка пропускает
NSString *icon = [[NSString alloc] initWithUTF8String:dbIcon];
Эта строка не
NSString *desc = [[NSString alloc] initWithUTF8String:dbDescription];
Вот что показывает инструмент:
и когда я углубляюсь: