При использовании NSKeyedArchiver, вы должны использовать аксессоры или ivars? - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть класс модели, который реализует протокол NSCoding. У меня есть свойство с именем dataModel, которое является экземпляром этого класса. Когда я сохраняю / загружаю этот экземпляр на / с диска, я должен использовать синтезированные средства доступа для dataModel или ивары напрямую? И почему?

Это под iOS 5 и ARC, и моя собственность объявлена ​​как:

@property (strong, atomic) QardDataModel *dataModel;

Для иллюстрации это будет способ доступа к нему:

-(void)saveData {
    [NSKeyedArchiver archiveRootObject:self.dataModel toFile:[self saveFilePath]];
}

-(void)loadData {
    self.dataModel = [NSKeyedUnarchiver unarchiveObjectWithFile:[self saveFilePath]];
}

Существует удобный метод, называемый saveFilePath, который возвращает путь к архивному файлу.

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Если вы архивируете / разархивируете набор данных с миллионами объектов, то при непосредственном доступе к переменной есть очень небольшое преимущество в производительности.

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

Если, однако, вы многократно архивируете и разархивируете множество мелких объектов (сотни тысяч раз), то вы должны использовать инструменты, чтобы проверить,objc_msg_send - перетаскивание производительности.Непосредственный доступ к переменным - это способ исправить это.

Помимо этого, как правило, лучше использовать методы доступа по разным причинам (ни одна из них не особенно важна).

1 голос
/ 12 декабря 2011

Это абсолютно не имеет значения

(хотя вы можете найти методы доступа немного более удобными, поскольку вам не нужен явный retain)

...