Чтобы дать некоторый контекст, я новичок в iOS/Objective-C с веб-дизайном (Ruby/JS/C#). Я понимаю, как работают классы, но я не понимаю, почему первоначальные разработчики написали эти два класса (NSKeyedArchiver
и NSKeyedUnarchiver
) вместо того, чтобы объединить логику кодирования и декодирования в один класс.Почему NSKeyedUnarchiver существует, когда NSKeyedArchiver наследуется от NSCoder?
Чтение Apple documentation for the abstract class NSCoder
a NSCoder
имеет методы как для кодирования, так и для декодирования. Единственное, что я могу придумать, это то, что код был длинным, поэтому первоначальный разработчик разделил его на 2 ... Мне кажется, что разработчику было бы более удобно использовать только один класс, но, возможно, m пропустил что-то нюансированное об этом. Так есть ли исторические причины для этого? Было ли «NSCoder
» «удобством» в том, что оно определяет оба API кодирования/декодирования, но предназначено для разделения на кодировщик/декодеры? Я не понимаю, что должен делать NSCoder
?
Может быть правдой, а затем Apple создала NSPortCoder, который фактически реализует как кодирование, так и функцию декодирования. Если я правильно понимаю документацию Apple, методы кодирования и декодирования иногда были разбиты на разные классы по соображениям производительности (см. Последние 2 параграфа): https://developer.apple.com/library/mac/documentation/cocoa/Conceptual/Archiving /Articles/subclassing.html#//apple_ref/doc/uid/20000951 –
@WolfgangSchreurs Это то, что я пытался сделать, - что нет идеального дизайнерского решения этой проблемы, поэтому дизайнеры Cocoa должны были взять один или другой , Благодаря! – dasblinkenlight
Спасибо @dasblinkenlight за ответ, оценили концептуальные ссылки :) Но я все еще немного запутался с NSCoder, так как он, кажется, нарушает SRP, имея методы как для кодирования/декодирования (как NSArchiver, так и NSUnarchiver наследуют от него). Почему бы не выделить два отдельных абстрактных класса: NSEncoder и NSDecoder? Мне кажется странным, что NSArchiver расшифровывает методы для этого ... Но опять же, я все еще ObjC noob :) –