Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 导致内存增长的持久分配_Ios_Objective C_Xcode_Sqlite_Instruments - Fatal编程技术网

Ios 导致内存增长的持久分配

Ios 导致内存增长的持久分配,ios,objective-c,xcode,sqlite,instruments,Ios,Objective C,Xcode,Sqlite,Instruments,我一直在使用仪器来减少我的应用程序的内存占用。在“Profile”模式下运行并在标记生成时选择Leaks选项,我注意到我的SQLite数据库类保留了导致内存增长的变量。由于我的应用程序在更新过程中将调用这些函数数千次,因此它开始变成一个更大的问题 第一个函数只是准备SQL语句并绑定可能存在的任何变量: 其中提供了以下信息: 0 libsystem\u malloc.dylib malloc\u zone\u malloc 1 libsqlite3.dylib 0x1958cf588 2 lib

我一直在使用仪器来减少我的应用程序的内存占用。在“Profile”模式下运行并在标记生成时选择Leaks选项,我注意到我的SQLite数据库类保留了导致内存增长的变量。由于我的应用程序在更新过程中将调用这些函数数千次,因此它开始变成一个更大的问题

第一个函数只是准备SQL语句并绑定可能存在的任何变量: 其中提供了以下信息:
  • 0 libsystem\u malloc.dylib malloc\u zone\u malloc
  • 1 libsqlite3.dylib 0x1958cf588
  • 2 libsqlite3.dylib 0x1958d7f68
  • 3 libsqlite3.dylib 0x19591cc58
  • 4 libsqlite3.dylib 0x195905728
  • 5 libsqlite3.dylib 0x195914a0c
  • 6 libsqlite3.dylib 0x195906dc8
  • 7 libsqlite3.dylib sqlite3_步骤
  • 8 poc-[Db逐步通过]应用程序/数据库m:79
  • 9 poc-[Update]app/Update.m:208
  • 10 poc 57-[AppDelegate应用程序:didFinishLaunchingWithOptions:][u block\u invoke\u 2 app/AppDelegate.m:70
  • 11 libdispatch.dylib_dispatch_call_block_和_release
  • 12 libdispatch.dylib_dispatch_client_callout
  • 13 libdispatch.dylib_dispatch_main_queue_callback_4CF
  • 14 CoreFoundation\uuu CFRUNLOOP\u正在为主调度队列提供服务_
  • 15核心基金会
  • 16 CoreFoundation CFRunLoopRunSpecific
  • 17图形服务GSEventRunModal
  • 18 UIKit UIApplicationMain
  • 19 poc主应用程序/主应用程序m:16
  • 20 libdyld.dylib开始

希望这些信息足以让某人说“哦,你有一个额外的保留计数”,但是如果你需要更多的信息,请告诉我。

我发现了我的问题-我没有调用
sqlite3\u finalize
,因为我准备的语句保留了内存。在我调用这个函数之后,我的内存使用量急剧下降

编辑再详细一点,完成查询后,我运行我创建的新函数来清理内存:

- (void)finalise {
    sqlite3_finalize(_statement);
}
在我的应用程序中,其外观如下所示:

Db * db = [[Db alloc] init];
[db prepare:@"SELECT * FROM `table`" withBindings:@[]];

while ([db stepThrough]) {
    // Do something with data here
}

[db finalise];

你能展示你的固定代码,使之对其他人有价值吗?这有助于实际阅读。@HotLicks请遵循“如何回答”的指导原则,即“为链接提供上下文”和“始终保持礼貌并享受乐趣”。谢谢
- (void)finalise {
    sqlite3_finalize(_statement);
}
Db * db = [[Db alloc] init];
[db prepare:@"SELECT * FROM `table`" withBindings:@[]];

while ([db stepThrough]) {
    // Do something with data here
}

[db finalise];