「余分なループ」を実行する前の割り当て
コード:
// loading items to the array, there are no memory warnings after this is completed. The first allocations screenshot is after this code and before extra loop code.
NSMutableArray *albumCovers = [[NSMutableArray alloc] init];
for (MPMediaQuery *query in queries) {
NSArray *allCollections = [query collections];
for (MPMediaItemCollection *collection in allCollections) {
MPMediaItemArtwork *value = [collection.representativeItem valueForProperty:MPMediaItemPropertyArtwork];
UIImage *image = [value imageWithSize:CGSizeMake(100, 100)];
if (image) {
[albumCovers addObject:image];
}
}
}
}
_mediaCollections = [NSArray arrayWithArray:artworkedCollections];
_albumCovers = [NSArray arrayWithArray:albumCovers];
}
そして他の場所:
// !!!!! extra loop - from here the memory starts to grow and never release
for (i=0; i< 800; i++) {
UIImage * coverImage = [_albumCovers objectAtIndex:indexPath.row];
[veryTemp setImage:coverImage]; // exactly this line adds to the memory. with this line commented, there is no problem.
}
「余分なループ」を実行した後の割り当て
明確にするために、only-obj-c をオンにし、システム ライブラリをオフにしてスタックを呼び出します (それらをオンにすると、最も重いメソッドごとに最大 % が 0.9% になります)
私はいくつかの調査を行い、stackoverflowで、これらVM:ImageIO_PNG_Data
は通常 から来ていることを発見しましたが[UIImage imageNamed:]
、ご覧のとおり、私はこのメソッドを使用していませんMPMediaItemCollection
。