我有一个方法可以检索大量数据并将其存储到数组中,然后将其传递给完成处理程序:
endsWith()
问题是我的数组" cupsPastYearTotalArray"有超过500个对象,所以我的项目内存使用量高达600 MB,然后崩溃。
我管理所有这些数据的最佳方式是什么,以便我的应用程序能够崩溃?
答案 0 :(得分:1)
您可以尝试使用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)
}];
答案 1 :(得分:0)
&#34; body.description&#34;给你一个body的描述,适合调试。你永远不应该在调试语句之外使用它。很可能你想在某处检查[NSNull null]。你肯定不想在一个循环中一次又一次地重复检查。您计算的描述是 big 。 Puneet的帮助避免了内存不足,它不会通过生成 600 MB以上的数据来阻止代码浪费CPU时间和电池寿命。