应用程序因内存问题而崩溃' GET'请求许多对象

时间:2017-10-05 17:45:07

标签: ios objective-c xcode

我有一个方法可以检索大量数据并将其存储到数组中,然后将其传递给完成处理程序:

endsWith()

问题是我的数组" cupsPastYearTotalArray"有超过500个对象,所以我的项目内存使用量高达600 MB,然后崩溃。

我管理所有这些数据的最佳方式是什么,以便我的应用程序能够崩溃?

2 个答案:

答案 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时间和电池寿命。