@@ -1103,26 +1103,35 @@ - (NSMutableArray *)executeOneColumnResult:(FMResultSet *)set {
1103
1103
return array;
1104
1104
}
1105
1105
1106
+ - (void )foreachResultSet : (FMResultSet *)set block : (void (^)(void ))block {
1107
+ while ([set next ]) {
1108
+ @autoreleasepool {
1109
+ block ();
1110
+ }
1111
+ }
1112
+ }
1113
+
1106
1114
- (NSMutableArray *)executeResult : (FMResultSet *)set Class : (Class )modelClass tableName : (NSString *)tableName {
1107
1115
NSMutableArray *array = [NSMutableArray arrayWithCapacity: 0 ];
1108
1116
if (!modelClass) {
1109
- while ([set next ]) {
1117
+ // 防止内存释放太慢引起的 OOM,用 autorelease 包一层
1118
+ [self foreachResultSet: set block: ^{
1110
1119
NSDictionary *dict = [set resultDictionary ];
1111
1120
if (dict) {
1112
1121
[array addObject: dict];
1113
1122
}
1114
- }
1123
+ }];
1115
1124
} else {
1116
1125
LKModelInfos *infos = [modelClass getModelInfos ];
1117
1126
NSInteger columnCount = [set columnCount ];
1118
1127
1119
1128
// /当主键是int类型时 会替换掉rowid
1120
1129
NSString *rowidAliasName = [modelClass db_rowidAliasName ];
1121
-
1122
- while ([ set next ]) {
1130
+ // 防止内存释放太慢引起的 OOM,用 autorelease 包一层
1131
+ [ self foreachResultSet: set block: ^ {
1123
1132
NSObject *bindingModel = [[modelClass alloc ] init ];
1124
1133
if (bindingModel == nil ) {
1125
- continue ;
1134
+ return ;
1126
1135
}
1127
1136
for (int i = 0 ; i < columnCount; i++) {
1128
1137
NSString *sqlName = [set columnNameForIndex: i];
@@ -1159,21 +1168,28 @@ - (NSMutableArray *)executeResult:(FMResultSet *)set Class:(Class)modelClass tab
1159
1168
bindingModel.db_tableName = tableName;
1160
1169
[modelClass dbDidSeleted: bindingModel];
1161
1170
[array addObject: bindingModel];
1162
- }
1171
+ }];
1163
1172
}
1164
1173
return array;
1165
1174
}
1166
1175
1167
1176
#pragma mark - insert operation
1168
1177
- (BOOL )insertToDB : (NSObject *)model {
1169
- return [self insertBase: model];
1178
+ BOOL success = NO ;
1179
+ @autoreleasepool {
1180
+ success = [self insertBase: model];
1181
+ }
1182
+ return success;
1170
1183
}
1171
1184
1172
1185
- (void )insertToDB : (NSObject *)model callback : (void (^)(BOOL ))block {
1173
1186
LKDBCode_Async_Begin;
1174
- BOOL result = [sself insertBase: model];
1187
+ BOOL success = NO ;
1188
+ @autoreleasepool {
1189
+ success = [sself insertBase: model];
1190
+ }
1175
1191
if (block) {
1176
- block (result );
1192
+ block (success );
1177
1193
}
1178
1194
LKDBCode_Async_End;
1179
1195
}
@@ -1284,14 +1300,21 @@ - (BOOL)insertBase:(NSObject *)model {
1284
1300
1285
1301
#pragma mark - update operation
1286
1302
- (BOOL )updateToDB : (NSObject *)model where : (id )where {
1287
- return [self updateToDBBase: model where: where];
1303
+ BOOL success = NO ;
1304
+ @autoreleasepool {
1305
+ success = [self updateToDBBase: model where: where];
1306
+ }
1307
+ return success;
1288
1308
}
1289
1309
1290
1310
- (void )updateToDB : (NSObject *)model where : (id )where callback : (void (^)(BOOL ))block {
1291
1311
LKDBCode_Async_Begin;
1292
- BOOL result = [sself updateToDBBase: model where: where];
1312
+ BOOL success = NO ;
1313
+ @autoreleasepool {
1314
+ success = [sself updateToDBBase: model where: where];
1315
+ }
1293
1316
if (block) {
1294
- block (result );
1317
+ block (success );
1295
1318
}
1296
1319
LKDBCode_Async_End;
1297
1320
}
0 commit comments