我想我可能要訪問這個錯誤,也許有人可以點我在正確的方向。訪問數據屬性給我的內存問題
我有一個Entry
實體,它與Media
實體有一對多的關係。媒體實體包含一個名爲originalImage
的數據屬性。
迭代的前50個實體在集合中沒有任何media
項目。在此之後,它會減慢,因爲它訪問originalImage
屬性,並最終耗盡內存並退出到主屏幕,沒有比以前的記憶中的NSLog警告之外的任何消息。在儀器上運行此功能也會顯示此時已耗盡內存。這裏是我的代碼:
NSFetchRequest *oldFetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *oldEntryEntity = [NSEntityDescription entityForName:@"Entry"
inManagedObjectContext:oldMOC];
[oldFetchRequest setEntity:oldEntryEntity];
[oldFetchRequest setFetchBatchSize:10];
NSArray *entrys = [oldMOC executeFetchRequest:oldFetchRequest error:nil];
for (NSInteger index = 0; index < entrys.count; ++index) {
Entry *entry = [entrys objectAtIndex:index];
NSOrderedSet *oldMediaSet = [entry valueForKey:@"media"];
for (Media *media in oldMediaSet) {
@autorelease {
[media valueForKey:@"originalImage"];
}
}
}
去除originalImage線意味着它不會崩潰,這是什麼使我相信這是關係到所訪問。也許我得到orderedSet的方式意味着這些項目留在內存中?
安德魯,你有什麼想在這裏完成?你爲什麼要加載每張圖片 - 你是否想要找到一張圖片,如果是,那麼爲什麼不給媒體添加一些標籤,以便知道你想要的圖片。如果你真的只想看到每張圖片的大小,那也沒問題,我可以給你一些建議,但首先讓我知道你想要完成什麼。 –
@DavidH我想將舊數據庫中的所有條目遷移到新數據庫。我有比上面更多的代碼,但將它評論爲找到只留下上面代碼的問題。爲什麼我不使用標準遷移?因爲蘋果承認,這不適用於大數據集,所以我必須手動完成。 – Andrew