当我使用Leaks工具运行时,我的iphone应用程序有很多按钮(我用按钮创建了日历视图) - 没有发现泄漏。但不知何故,Allocation Live Bytes达到21MB且应用程序崩溃(点击按钮约120次)。
不再使用系统自动释放内存......如果没有泄漏,内存如何继续增加?任何关于如何处理这个问题的想法将不胜感激。感谢。
我在我的应用程序中使用sqlite3加载(日历 - 值一次保存30天的商店) - 调用函数getSingRecord 30次...下面是实际代码
-(void) insertRecordIntoTableNamed:
{
NSString *sql="Insert Statement......";
char *err;
if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
sqlite3_close(db);
NSAssert(0,@"Error updating table");
}
}
-(NSString *) getSingRecord: (NSString *) getStatement{
NSString *sql=getStatement;
sqlite3_stmt *statement;
NSString *fieldFlagI=@"0";
if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
char *fieldFlag=(char *) sqlite3_column_text(statement, 0);
fieldFlagI=[[NSString alloc] initWithUTF8String:fieldFlag];
//fieldFlagI=[NSString initWithUTF8String:fieldFlag];
}
sqlite3_finalize(statement);
}
//NSString *ffI=fieldFlagI;
//[fieldFlagI release]
return [fieldFlagI autorelease];
}
答案 0 :(得分:1)
你很可能依赖的是一个永不消耗的自动释放池。由于池存在并保留您的对象,因此工具不会将此检测为内存泄漏。如果你永远不会耗尽游泳池,你分配的所有物品即使在你完成之后也会保持活力。
答案 1 :(得分:0)
泄漏是没有人引用的对象,但是没有发布。如果您将对象保留在数据结构中并保持它们,那么这不会被视为泄漏,但这是一个问题。你按下按钮怎么办?
更新:根据您的代码
不要自动释放返回 - 你并不总是分配它(初始化为@“0”),只有在你分配它时才自动释放。
但那不是你的泄密。
在while()中,每次循环时,都会泄漏你分配的最后一个 - 你的get语句肯定会返回一行吗?如果是这样,为什么一会儿()?