我有一个方法可以检索大量数据并将其存储到数组中,然后将其传递给完成处理程序:
[edcs getClinicalPatientDataWithDictionaryForPatientID:participant.participantNum withStartDate:pastDate withEndDate:currentDate completionBlock:^(NSDictionary *jsonDict) {
if ([jsonDict[@"status"] isEqualToString:@"200"]) {
if (jsonDict[@"body"]) {
NSMutableArray *body = [NSMutableArray arrayWithObject:jsonDict[@"body"]];
if (body) {
// Query all measurements
for (NSArray *jsonArray in body) {
for (NSDictionary *measurementDict in jsonArray) {
// Separate Hydration measurements
if (![body.description containsString:@"<null>"]) {
if (measurementDict) {
if ([[measurementDict objectForKey:@"MeasureUnitID"] isEqualToString:@"Cups"]) {
[cupsPastYearTotalArray addObject:measurementDict];
}
}
}
}
}
completionBlock(cupsPastYearTotalArray);
问题是我的数组“cupsPastYearTotalArray”有超过 500 个对象,所以我的项目内存使用量上升到 600 MB,然后崩溃。
管理所有这些数据以防止我的应用程序崩溃的最佳方式是什么?
最佳答案
您可以尝试使用 autoreleasepool block .
[edcs getClinicalPatientDataWithDictionaryForPatientID:participant.participantNum withStartDate:pastDate withEndDate:currentDate completionBlock:^(NSDictionary *jsonDict) {
if ([jsonDict[@"status"] isEqualToString:@"200"] && jsonDict[@"body"]) {
NSMutableArray *body = [NSMutableArray arrayWithObject:jsonDict[@"body"]];
for (NSArray *jsonArray in body) {
@autoreleasepool {
for (NSDictionary *measurementDict in jsonArray) {
@autoreleasepool {
if (![body.description containsString:@"<null>"] && measurementDict && [[measurementDict objectForKey:@"MeasureUnitID"] isEqualToString:@"Cups"]) {
[cupsPastYearTotalArray addObject:measurementDict];
}
}
}
}
}
}
completionBlock(cupsPastYearTotalArray)
}];
关于ios - 由于 'GET' 请求多个对象的内存问题导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46591818/