ios - Is it possible to override a designated initializer with a convenience initializer? -


some 1 wants override uitableviewcontroller's designated initializer - (instancetype)initwithstyle:(uitableviewstyle)style. added following code:

- (instancetype)initwithstyle:(uitableviewstyle)style {     self = [self init];      return self; } 

and gets 2 warnings :

  1. designated initializer should invoke designated initializer on 'super'
  2. designated initializer missing 'super' call designated initializer of super class

it might bad practice so. however, possible @ override designated initializer convenience initializer without raising warnings?

thanks!

this possible there several conditions must met in order no compiler warnings. designated initialisers sub-class must overridden, use ns_designated_initializer macro mark init.. methods treated designated initialisers.

the following sub-class of uitableviewcontroller -

.h

- (instancetype)initwithstyle:(uitableviewstyle)style;// no longer designated initialiser  - (instancetype)init ns_designated_initializer;  - (instancetype)initwithnibname:(nsstring *)nibnameornil bundle:(nsbundle *)nibbundleornil ns_designated_initializer;  - (instancetype)initwithcoder:(nscoder *)adecoder ns_designated_initializer; 

.m

- (instancetype)initwithstyle:(uitableviewstyle)style { //.. no longer treated designated initialiser self = [self init];  return self; }  - (instancetype)init {     if (self = [super initwithstyle:uitableviewstyleplain]) {         //.. treated designated initialiser     }     return self; }  - (instancetype)initwithnibname:(nsstring *)nibnameornil bundle:(nsbundle *)nibbundleornil {     if (self = [super initwithnibname:nibnameornil bundle:nibbundleornil]) {         //.. must implement     }     return self; }  - (instancetype)initwithcoder:(nscoder *)adecoder {     if (self = [super initwithcoder:adecoder]) {         //.. must implement     }     return self; } 

additional info found in adopting modern objective-c under object initialization.


Comments