Ios 导致内存增长的持久分配
我一直在使用仪器来减少我的应用程序的内存占用。在“Profile”模式下运行并在标记生成时选择Leaks选项,我注意到我的SQLite数据库类保留了导致内存增长的变量。由于我的应用程序在更新过程中将调用这些函数数千次,因此它开始变成一个更大的问题 第一个函数只是准备SQL语句并绑定可能存在的任何变量: 其中提供了以下信息: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
- 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];