0

我在使用固件为 4.2.1 (8C148) 的 iphone 3g 时遇到了 fmdb 问题。我有一个包含 sql 命令(从数据库下载)的大型 NSMutableArray。我通过 NSAutoreleasePool 填充 NSMutableArray(为 iphone 3g 释放一些内存的一部分),我得到了一个 40+ mb 的数组。

然后,我使用以下命令:

 [db beginTransaction];
 for (NSString* sql in updateSQL)
 {
  if (sql!=@"") {
   BOOL fmtest = [db executeUpdate:sql];
   if (!fmtest) {
    NSLog(@"Sql FAIL: %@",sql);
   }
   if ([db hadError]) {
    NSLog(@"Err %d: %@", [db lastErrorCode], [db lastErrorMessage]);
   }
 }
 // fetches--; // Counter of total updates;
}
[db commit];

在更新过程中,我获得了 40/50 Mb 的内存分配。Iphone 3g 无法处理这个问题,它以 1 级警告惨遭失败并最终退出。

我在 iphone 3GS 上试过,效果很好。

有谁知道如何跳过它?我不能使用核心数据(尽管它是一个很好的解决方案),因为我已经有一个与应用程序捆绑在一起的大型数据库。

4

1 回答 1

1

使用在调用之间关闭数据库

[db close];

确保释放不再使用的内存。

大多数开发人员试图尽可能长时间地保持数据库连接打开。然而,在 iPhone 上——内存最严格的约束和 IO 速度很快——在大多数情况下,为每个调用重复打开/关闭数据库会更快。

于 2011-06-15T11:44:26.843 回答