> On Aug 10, 2015, at 1:27 PM, Seth Willits <sli...@araelium.com> wrote: > > > I've yet to understand this: > https://gist.github.com/swillits/3133e114f770947b3cf6 > > > If a subclass says that its superclass's designated initializer is > unavailable (IOW, the subclass's designated initializer must be used), why > does the compiler produce a warning that the superclass's designated > initializer must be overridden in the subclass? > > If the subclass is going to call super's designated initializer via [super > init....] then this subclass override would never get called anyway... > > What am I missing?
Convenience initializers. Consider: a superclass that implements a designated initializer and a convenience initializer, and your subclass that introduces a new designated initializer. @implementation SomeSuperclass -(id) init; // designated initializer -(id) convenienceInitializer { return [self init]; } @end @implementation YourSubclass : SomeSuperclass -(id) initWithValue:(id)value { // designated initializer return [super init]; } @end Now somebody writes this: id obj = [YourSubclass convenienceInitializer]; This object will not be correctly initialized. It will never call -initWithValue which is required to initialize YourSubclass properly. The solution is for the subclass to cover all of its superclass's designated initializers. You can implement it to call your designated initializer with appropriate default values: @implementation YourSubclass ... -(id) init { // cover of superclass's designated initializer // delegate to our designated initializer return [self initWithValue:nil]; } @end or you can implement it to fail at runtime: @interface YourSubclass -(id) init NS_UNAVAILABLE; @end @implementation YourSubclass ... -(id) init { abort(); // or throw or whatever } @end Either approach will pacify the compiler. -- Greg Parker gpar...@apple.com Runtime Wrangler _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com