iPhone 内存泄漏 NSDictionary

标签 iphone objective-c memory-leaks

我对 Objective-C 中的内存管理不是很熟悉,但我尽力了。我的应用程序在几分钟后崩溃。在 Instruments 的帮助下,我发现了许多泄漏。有时我只是忘记释放对象或没有将其放入自动释放池中。但现在我真的不知道这个方法的问题出在哪里。 仪器显示 3 行泄漏。

感谢您的帮助。

- (NSMutableArray *)rowsFromTablePages {

NSString *sql = [NSString stringWithFormat:@"SELECT paid, creationdate, lastuseddate, image, background, backgroundid FROM Pages WHERE nsid=%i ORDER BY paid", _nsid];

sqlite3_stmt *statement;
NSMutableArray *allPages = [[[NSMutableArray alloc] init] autorelease];

  if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {
      while (sqlite3_step(statement) == SQLITE_ROW) {
          int paid = (int)sqlite3_column_int(statement, 0);
          char *creationdate = (char *)sqlite3_column_text(statement, 1);
          char *lastuseddate = (char *)sqlite3_column_text(statement, 2);
          NSData *data = [NSData dataWithBytes:sqlite3_column_blob(statement, 3) length:sqlite3_column_bytes(statement, 3)]; // Leak
          NSData *databg = [NSData dataWithBytes:sqlite3_column_blob(statement, 4) length:sqlite3_column_bytes(statement, 4)]; // Leak
          int bgid = (int)sqlite3_column_int(statement, 5);

          NSDictionary *rowInArray = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:paid], @"PAID", [NSString stringWithUTF8String:creationdate], @"CREATIONDATE", [NSString stringWithUTF8String:lastuseddate], @"LASTUSEDDATE", [UIImage imageWithData:data], @"THUMBNAIL", [NSNumber numberWithInt:bgid], @"BGID", [UIImage imageWithData:databg], @"THUMBNAILBG", nil]; // Leak

          [allPages addObject:rowInArray];
      }
      sqlite3_finalize(statement);
  }
  return allPages;
}

在同一个类 Instruments 中,调用此方法的地方显示了泄漏。

- (void)reloadDataFromSQL {
    _dataSource = [[NSMutableArray alloc] initWithArray:[self rowsFromTablePages]]; // Leak
    [self.tableView reloadData];
}

最佳答案

在方法 reloadDataFromSQL 中,您将新内存分配给 NSMutableArray 实例,而不释放任何内容。

关于iPhone 内存泄漏 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6285662/

相关文章:

iphone - AVAssetWriter 输出文件被旋转

ios - 应用程序升级问题

iphone - 如何得到坐标?

iphone - 如何在 iphone 中以编程方式创建 PLIST 文件

windows - 试图通过批处理文件阻止 RuntimeBroker.exe 使用过多的 CPU

delphi - FastMM 报告记录线程变量内存泄漏

objective-c - 持久化自定义对象

ios - Xcode:使用 pod 依赖项创建框架

ios - 将图像从 UITabBarController 传递到 subview (Swift)

c - char 数组中不需要的文本