Objective c ios中sqlite3内存泄漏
其基于位置的应用程序和5-6年后的应用程序崩溃 分钟。当我使用性能工具运行应用程序时,我会保持 发现我所有的类都泄漏内存。我叫这个 一秒一秒地工作。请正确关闭我的数据库或 sqlite3。谢谢Objective c ios中sqlite3内存泄漏,objective-c,ios,memory-management,sqlite,Objective C,Ios,Memory Management,Sqlite,其基于位置的应用程序和5-6年后的应用程序崩溃 分钟。当我使用性能工具运行应用程序时,我会保持 发现我所有的类都泄漏内存。我叫这个 一秒一秒地工作。请正确关闭我的数据库或 sqlite3。谢谢 - (void)locationUpdate:(CLLocation *)location { for (int i=0; i<[arrayAlerts count]; i++) { Msg=[DatabaseManager Ge
- (void)locationUpdate:(CLLocation *)location {
for (int i=0; i<[arrayAlerts count]; i++) {
Msg=[DatabaseManager GetSelectedMessage:[NSString stringWithFormat:@"select text_msg from TextMsgTemplate where msg_id=%d",ObjAlertInfo.msgID]];
}
in Databasemanger
+(NSString *)GetSelectedMessage:(NSString *)SQL
{
NSString *msg;//=[[[NSString alloc]init] autorelease];
msg=nil;
sqlite3_stmt *dataset=nil;
dataset=[DatabaseManager getMessages:SQL];
while ((sqlite3_step(dataset)==SQLITE_ROW) ) {
msg=[NSString stringWithUTF8String:(char *)sqlite3_column_text(dataset, 0)];
}
sqlite3_finalize(dataset);
dataset = nil;
return msg;
}
+(sqlite3_stmt *)getMessages:(NSString *)SQL
{
sqlite3_stmt *dataset=nil;
sqlite3_stmt *finaldataset=nil;
if (sqlite3_open([[self getdatabasePath] UTF8String], &database) == SQLITE_OK ) {
if (sqlite3_prepare_v2(database, [SQL UTF8String], -1, &dataset, NULL) != SQLITE_OK)
{
NSLog(@"error get message");
return nil;
}else{
finaldataset= dataset;
}
}
sqlite3_close(database);
return finaldataset;
}
-(无效)位置更新:(CLLocation*)位置{
对于(int i=0;i)和仪器告诉您泄漏在哪里?仪器内存逐秒增加..显示为蓝色..不显示为红色,堆栈跟踪(右侧窗格)告诉您什么?“此块中没有可用的堆栈跟踪”,我认为分配有问题。所有分配在一分钟内显示25.15 Mb。当我更改**Msg时=[DatabaseManager GetSelectedMessage:[NSString stringWithFormat:@“从TextMsgTemplate中选择文本消息,其中消息id=%d”,objalerInfo.msgID];**到**消息=@“您好”****…然后没有额外的内存分配,应用程序可以完美运行。我不明白为什么getMessages
关闭数据库,但是getselectedmessages
继续调用sqlite3\u step
和sqlite3\u finalize
。如果我读对了,我很惊讶它能正常工作。通常你打开、准备、step、fi值得注意的是,finalize应该释放内存资源,但不知道如果数据库已经关闭,它会做什么。