Tôi gặp sự cố này. Tôi có một cơ sở dữ liệu hình ảnh trong Dữ liệu chính. Tôi lấy tất cả hình ảnh (khoảng 80MB) và đặt vào NSMutableArray. Các đối tượng đang bị sự cố một cách chính xác:Sử dụng bộ nhớ dữ liệu chính và cảnh báo bộ nhớ
NSArray *fetchResults = [self.managedObjectContext executeFetchRequest:request error:&error];
self.cache = [NSMutableArray arrayWithArray:fetchResults];
for (ImageCache *imageObject in self.cache) {
NSLog(@"Is fault? %i", [imageObject isFault]);
}
Đọc nhật ký, tôi thấy rằng các đối tượng đều đổ lỗi một cách chính xác Tuy nhiên, sử dụng dụng cụ, tôi thấy rằng 80MB bộ nhớ được sử dụng. Tôi nghĩ rằng đây là lý do tại sao Core Data lưu trữ kết quả của nó, và nên giải phóng bộ nhớ khi cần thiết. Nhưng (và đây là "vấn đề" của tôi), nếu tôi mô phỏng một cảnh báo bộ nhớ, không có gì xảy ra! 80MB vẫn còn đó.
Nhìn vào công cụ - phân bổ, các 80MB được sử dụng bởi nhiều Malloc: (ví dụ)
Graph Thể loại trực Bytes # Sống # tạm Nhìn chung Bytes # Nhìn chung # Phân bổ (Net/Nhìn chung) 0 Malloc 176,00 KB 8,59 MB 50 57 18,39 MB 107% 0,00,% 0,00 0 Malloc 200,00 KB 8,20 MB 42 460 98,05 MB 502% 0,00,% 0,04 0 Malloc 168,00 KB 7,05 MB 43 19 10,17 MB 62% 0.00, 0.00%
Đây là một liên kết đến một hình ảnh của toàn bộ cuộc gọi Tree: https://www.dropbox.com/s/du1b5a5wooif4w7/Call%20Tree.png
Bất kỳ ý tưởng nào? Cảm ơn
Có thể dữ liệu lõi giải phóng bộ nhớ trên 'Memory Warning Level 2'? Có thể tạo ra sự cố bộ nhớ thấp với kịch bản của bạn không? – brigadir
Có bất kỳ "phương pháp ma thuật" nào để mô phỏng Cảnh báo bộ nhớ cấp 2 không? Hay "đơn giản" tôi phải tiêu thụ trí nhớ? – LombaX
Tôi không biết bất kỳ phương pháp mô phỏng nào. Bạn nên chạy một ứng dụng "nặng" khác (Appstore chẳng hạn), giữ ứng dụng của bạn ở chế độ nền và theo dõi nhật ký bảng điều khiển và biểu đồ bộ nhớ Công cụ. Cảnh báo 'mức 2' sẽ được đề cập trong bảng điều khiển - vì vậy bạn nên xem biểu đồ bộ nhớ tại thời điểm đó. – brigadir