iphone - Objective-C, protocols and subclasses -
let's have following protocols defined:
// basic protocol user interface object:
@protocol uiobjectprotocol <nsobject> @property (assign) bool touchable; @end
// basic protocol user interface object held holder
object:
@protocol uiheldobjectprotocol <uiobjectprotocol> @property (readonly) id holder; @end
and following class hierarchy:
// base class user interface object, synthesizes touchable
property
@interface uiobject : nsobject <uiobjectprotocol> { bool _touchable; } @end @implementation uiobject @synthesize touchable=_touchable; @end
at point, ok. create uiobject
subclass named uiplayingcard
. inherently, uiplayingcard
conforms uiobjectprotocol
since it's superclass too.
now suppose want uiplayingcard
conform uiheldobjectprotocol
, following:
@interface uiplayingcard : uiobject <uiheldobjectprotocol> { } @end @implementation uiplayingcard -(id)holder { return nil; } @end
note uiplayingcard
conforms uiheldobjectprotocol
, transitively conforms uiobjectprotocol
. i'm getting compiler warnings in uiplayingcard
such that:
warning: property 'touchable' requires method '-touchable' defined - use @synthesize, @dynamic or provide method implementation
which means uiplayingcard
superclass conformance uiobjectprotocol
wasn't inherited (maybe because @synthesize
directive declared in uiobject
implementation scope).
am obligated re-declare @synthesize
directive in uiplayingcard
implementation ?
@implementation uiplayingcard @synthesize touchable=_touchable; // _touchable must protected attribute -(id)holder { return nil; } @end
or there's way rid of compiler warning? result of bad design?
thanks in advance,
i'll throw in 1 other way silence warning: use @dynamic
, , compiler assume implementation provided in other way in declaration in class's implementation (in case, it's provided superclass).
Comments
Post a Comment