Objective c ios中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

其基于位置的应用程序和5-6年后的应用程序崩溃 分钟。当我使用性能工具运行应用程序时,我会保持 发现我所有的类都泄漏内存。我叫这个 一秒一秒地工作。请正确关闭我的数据库或 sqlite3。谢谢

 - (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应该释放内存资源,但不知道如果数据库已经关闭,它会做什么。