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 :
- designated initializer should invoke designated initializer on 'super'
- 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
Post a Comment