Ответ 1
Если суперкласс принимает NSCoding
(что, вероятно, не всегда так), всегда вызывайте
[super initWithCoder:decoder]
В противном случае вызовите назначенный инициализатор.
Могу ли я спросить, какую версию я должен использовать, в моих старых приложениях я, кажется, использую "B", но когда я просматриваю множество примеров в Интернете, я вижу много версий, которые выглядят как "A".
// A
- (id)initWithCoder:(NSCoder *)decoder {
self=[super initWithCoder:decoder];
if(self) {
...
ИЛИ
// B
- (id)initWithCoder:(NSCoder *)decoder {
self=[super init];
if(self) {
...
Если суперкласс принимает NSCoding
(что, вероятно, не всегда так), всегда вызывайте
[super initWithCoder:decoder]
В противном случае вызовите назначенный инициализатор.
Зависит от соответствия суперкласса протоколу NSCoding
или нет. Если это так, вы должны позвонить [super initWithCoder:decoder]
. Если это не так, вы должны вызывать инициализатор назначенного суперкласса.
Например, если ваш класс является прямым подклассом NSObject
, вы вызываете [super init]
, NSObject
назначенный инициализатор, так как NSObject
не соответствует протоколу NSCoding
.