Skip to content

Commit 4a18ebb

Browse files
author
lijianghuai
committed
防止内存释放太慢引起的 OOM,用 autorelease 包一层
1 parent 1d4cf07 commit 4a18ebb

File tree

1 file changed

+35
-12
lines changed

1 file changed

+35
-12
lines changed

LKDBHelper/Helper/LKDBHelper.m

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,26 +1103,35 @@ - (NSMutableArray *)executeOneColumnResult:(FMResultSet *)set {
11031103
return array;
11041104
}
11051105

1106+
- (void)foreachResultSet:(FMResultSet *)set block:(void(^)(void))block {
1107+
while ([set next]) {
1108+
@autoreleasepool {
1109+
block();
1110+
}
1111+
}
1112+
}
1113+
11061114
- (NSMutableArray *)executeResult:(FMResultSet *)set Class:(Class)modelClass tableName:(NSString *)tableName {
11071115
NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];
11081116
if (!modelClass) {
1109-
while ([set next]) {
1117+
// 防止内存释放太慢引起的 OOM,用 autorelease 包一层
1118+
[self foreachResultSet:set block:^{
11101119
NSDictionary *dict = [set resultDictionary];
11111120
if (dict) {
11121121
[array addObject:dict];
11131122
}
1114-
}
1123+
}];
11151124
} else {
11161125
LKModelInfos *infos = [modelClass getModelInfos];
11171126
NSInteger columnCount = [set columnCount];
11181127

11191128
///当主键是int类型时 会替换掉rowid
11201129
NSString *rowidAliasName = [modelClass db_rowidAliasName];
1121-
1122-
while ([set next]) {
1130+
// 防止内存释放太慢引起的 OOM,用 autorelease 包一层
1131+
[self foreachResultSet:set block:^{
11231132
NSObject *bindingModel = [[modelClass alloc] init];
11241133
if (bindingModel == nil) {
1125-
continue;
1134+
return;
11261135
}
11271136
for (int i = 0; i < columnCount; i++) {
11281137
NSString *sqlName = [set columnNameForIndex:i];
@@ -1159,21 +1168,28 @@ - (NSMutableArray *)executeResult:(FMResultSet *)set Class:(Class)modelClass tab
11591168
bindingModel.db_tableName = tableName;
11601169
[modelClass dbDidSeleted:bindingModel];
11611170
[array addObject:bindingModel];
1162-
}
1171+
}];
11631172
}
11641173
return array;
11651174
}
11661175

11671176
#pragma mark - insert operation
11681177
- (BOOL)insertToDB:(NSObject *)model {
1169-
return [self insertBase:model];
1178+
BOOL success = NO;
1179+
@autoreleasepool {
1180+
success = [self insertBase:model];
1181+
}
1182+
return success;
11701183
}
11711184

11721185
- (void)insertToDB:(NSObject *)model callback:(void (^)(BOOL))block {
11731186
LKDBCode_Async_Begin;
1174-
BOOL result = [sself insertBase:model];
1187+
BOOL success = NO;
1188+
@autoreleasepool {
1189+
success = [sself insertBase:model];
1190+
}
11751191
if (block) {
1176-
block(result);
1192+
block(success);
11771193
}
11781194
LKDBCode_Async_End;
11791195
}
@@ -1284,14 +1300,21 @@ - (BOOL)insertBase:(NSObject *)model {
12841300

12851301
#pragma mark - update operation
12861302
- (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;
12881308
}
12891309

12901310
- (void)updateToDB:(NSObject *)model where:(id)where callback:(void (^)(BOOL))block {
12911311
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+
}
12931316
if (block) {
1294-
block(result);
1317+
block(success);
12951318
}
12961319
LKDBCode_Async_End;
12971320
}

0 commit comments

Comments
 (0)