NSUserDefaults с большим массивом - PullRequest
       13

NSUserDefaults с большим массивом

0 голосов
/ 24 октября 2018

Я создаю приложение MacOS.

В настоящее время я использую NSUserDefaults для сохранения NSMutableArray данных с помощью этого метода:

-(void)addPhotoUrl:(NSString*)url {
    [self.photosArray addObject:url];

    [[NSUserDefaults standardUserDefaults] setObject:self.photosArray forKey:@"kPhotos"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

И каждый раз при запуске приложенияЯ запускаю этот код для загрузки NSMutableArray:

-(void)loadPhotosLike {
    NSArray *myRepository = [[NSUserDefaults standardUserDefaults] arrayForKey:@"kPhotos"];
    if(myRepository && [myRepository count] != 0) {
        [self.photosArray addObjectsFromArray:myRepository];
    }
}

До сих пор он отлично работал, но так как массив становится действительно большим (64 000 элементов), я начинаю думать, что это решение было недостаточно хорошим.

Существует проблема, заключающаяся в том, что массив существует как в локальном NSMutableArray, так и сохраняется в NSUserDefaults каждый раз, когда я добавляю в него новый элемент, это хорошее решение, которое не влияет на локальную память / приложениепроблема с памятью / записью на диск?

Стоит ли вместо этого использовать Core Data?

Одна из основных целей массива - поиск объектов.Будет ли это быстрее с CoreData?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Проблема в том, что вы сохраняете данные изображения вместо пути к файлу.Даже использование базы данных для хранения коллекции изображений не является хорошей реализацией.Большой блок данных изображения приведет к медленной работе базы данных.Общая реализация заключается в том, чтобы сначала сохранить данные изображения в файловой системе, а затем сохранить соответствующий путь к файлу в хранилище индекса изображения.В этом случае использование UserDefaults или CoreData для постоянного хранения будет менее влиятельным.

0 голосов
/ 24 октября 2018

Согласно моему опыту NSUserDefaults используйте только для данных легкого веса, таких как некоторые данные, связанные с предпочтениями, которые вы можете хранить в userDefaults.

Также, если вы храните тяжелые / большие данные, это замедлит работу вашего приложения, так как оно будет хранитьв одном файле plist.

И из-за большой загрузки данных в приложение это создаст проблему с памятью, а когда вы работаете с MacOS, вы обнаружите проблему с памятью редко, но с точки зрения iOS это определенно создаст проблему.

Я нашел очень хороший блог Джеффри Фултона , в котором он подробно определяет, где нам нужно использовать UserDefaults, а где нет.

Ссылка: Ограничения UserDefaults и альтернативы

Кроме того, добавление к вышеуказанному UserDefault не является безопасным хранилищем, поскольку данные могут быть легко извлечены.

В вашем случае вы можете использовать Core Data или SQLIte, оба являются очень мощными и простыми в использовании инфраструктурой.для хранения данных.

Надеюсь, это поможет.

...