2013-05-31 41 views
5

Tôi đang sử dụng UINavigationcontroller làm bộ điều khiển chế độ xem gốc. Tôi mới làm quen với các hoạt động của ARC và sqlite trong ARC.Vấn đề về bộ nhớ trong ARC

  1. Trình quản lý gốc của tôi là loginviewcontroller next là homeview chứa scrollView with 4 UIviewcontroller in it.
  2. Tôi đang sử dụng Công cụ để kiểm tra khi tôi nhận được cảnh báo bộ nhớ. Sau khi sử dụng ứng dụng của tôi trong khoảng 5-10 phút, khi tôi đăng xuất (cho điều này tôi đang sử dụng popToRootViewController) và đăng nhập lại Sống Bytes tiếp tục tăng và khi tôi kiểm tra cuộc gọi Trees -

    [NSObject(NSTreadPerformAdditions) performselectorOnMainThread:withObject:waituntilDone:] 
    

lãm 15.91 MB Bytes sử dụng và sau đó cho thấy

tôi cũng làm hoạt động SQLite và sau khi thực hiện những hoạt động, nó sẽ thêm khoảng

if (sqlite3_open ([[tự filepath] UTF8String], & dBObje ! Ct) = SQLITE_OK)

lãm 10MB Sống Bytes cho OpenDatabase, selectquery và cập nhật

Đây là lần đầu tiên tôi thử nghiệm ứng dụng của tôi sử dụng dụng cụ, nó cho thấy như sau: enter image description here

Làm thế nào có thể tôi phát hành bộ nhớ này ngay bây giờ?

EDIT:

tôi đang sử dụng mã này cho khi truy xuất dữ liệu

-(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; 

} 

bất cứ khi nào phương pháp này được gọi là byte sống tiếp tục tăng tục

+0

Bạn đang gọi 'sqlite3_close (dbObject)' sau khi bạn hoàn thành một thao tác trên DB? – Amar

+0

Cảm ơn bạn đã trả lời có, tôi đã thực hiện điều đó – the1pawan

+0

Bạn có thể thêm một trong các mã chức năng vào câu hỏi của mình không? – Amar

Trả lời

2

Hãy thử điều này,

Trước khi bắt đầu vòng lặp của bạn, bạn phải mở cơ sở dữ liệu ...

và sau khi hoàn thành bạn phải đóng cơ sở dữ liệu của bạn ..

ví dụ

-(void)downloadData 
{ 
[self openDB];// database is open.. 

// start your loop 
for (int i=0; i<[array count]; i++) 
{ 
    [self executeInsertQuery]; 

} 

[self closeDb]; 
} 


-(void)openDB 
{ 
if(sqlite3_open([[self filePath]UTF8String],&dBObject)!= SQLITE_OK) 
{ 
    sqlite3_close(dBObject); 
} 

} 


-(void)closeDb 
{ 
if (dBObject) 
{ 

    int rc = sqlite3_close(dBObject); 
    NSLog(@"close rc=%d", rc); 

    if (rc == SQLITE_BUSY) 
    { 

     sqlite3_stmt *stmt; 
     while ((stmt = sqlite3_next_stmt(dBObject, 0x00)) != 0) 
     { 
      NSLog(@"finalizing stmt"); 
      sqlite3_finalize(stmt); 
     } 

     rc = sqlite3_close(dBObject); 
    } 

    if (rc != SQLITE_OK) 
    { 
     NSLog(@"close not OK. rc=%d", rc); 
    } 

    dBObject = NULL; 
} 

} 

    -(Bool)executeInsertQuery 
{ 


    NSString* strQuery=[NSString stringWithFormat: @"Insert into list(compnyID,UserMasterID) values('%@','%@');",companyId ,userId ]; 

char *err; 
if (sqlite3_exec(dBObject, [queryString UTF8String], NULL,NULL, &err)!= SQLITE_OK) 
{ 
    sqlite3_close(dBObject); 
    return NO; 
} 
else 
{ 
    return YES; 
} 


} 
+0

thats làm việc cho tôi .. Cảm ơn tôi đã có rất nhiều đau đầu vì điều này – the1pawan

Các vấn đề liên quan