【发布时间】:2013-05-27 05:14:41
【问题描述】:
我使用 UINavigationcontroller 作为根视图控制器。我是 ARC 下的 iphone ARC 和 sqlite 操作的新手。
- 我的 rootviewcontroller 是 loginviewcontroller,接下来是 homeview,其中包含带有 4 个 UIviewcontroller 的 scrollView。
-
我正在使用 Instruments 进行测试,因为我收到了内存警告。使用我的应用程序大约 5-10 分钟后,当我注销(为此我使用 popToRootViewController)并再次登录时,Live Bytes 继续增加并且当我检查调用树时 -
[NSObject(NSTreadPerformAdditions) performselectorOnMainThread:withObject:waituntilDone:]
显示 15.91MB Bytes 已使用,随后显示
我也在做 SQLite 操作,在执行这些操作时,它会在周围添加
if(sqlite3_open([[self filePath]UTF8String],&dBObject)!= SQLITE_OK)
显示 10MB 实时字节用于开放数据库、选择查询和更新
我第一次使用 Instruments 测试我的应用程序,它显示以下内容:
我现在如何释放这段记忆?
编辑:
我正在使用此代码检索数据
-(int)CheckCompanyIsAvailableInTradeList:(NSString *)CompanyId UserId:(NSString *)userId
{
int check=0;
if(sqlite3_open([[self filePath] UTF8String], &dBObject) == SQLITE_OK) {
NSString *sqlStatement =NULL;
sqlStatement = [ NSString stringWithFormat:@"SELECT COUNT(*) FROM tradelist WHERE compnyID = '%@' and UserMasterID ='%@' ;",CompanyId,userId];
if(sqlite3_prepare_v2(dBObject, [sqlStatement UTF8String], -1, &statement, NULL) == SQLITE_OK) {
@autoreleasepool {
while(sqlite3_step(statement) == SQLITE_ROW) {
check = sqlite3_column_int(statement, 0);
}
}
}
sqlite3_finalize(statement);
}
sqlite3_close(dBObject);
return check;
}
每当调用此方法时,活动字节都会继续增加 不断地
【问题讨论】:
-
在完成对 DB 的操作后,您是否在调用
sqlite3_close(dbObject)? -
感谢回复是的,我已经做到了
-
能否在你的问题中添加一个功能码?
-
检查我已经给了sn-p
-
您是否在循环/递归中调用任何 db 函数?如果是这种情况,尽量不要每次都打开和关闭连接,而是保持连接打开,直到递归结束,然后关闭它。
标签: iphone ios objective-c sqlite