objective c - overriding property attribute in class extension -
say have interface
// car.h @interface car  @property ( readonly) nsinteger rpm @end    i want users of access readonly
in other areas private code , not exposed users want manipulate rpm
say
// enginefeedback.h @interface enginefeedback @property(nonatomic , weak ) car *thecar; @end  // enginefeedback.m  -(void) enginerpmreceived:(nsinteger) newrpm {      thecar.rpm = newrpm; }   how can accomplish (where need writeable)
can define class extension overrides attributes
// car_internal.h @interface car () @property(readwrite) nsinteger rpm  @end    to able use
    // enginefeedback.m      #import "car_internal.h"     -(void) enginerpmreceived:(nsinteger) newrpm     {          thecar.rpm = newrpm;     }   is bad ? there better way achieve ?
using class extension override readonly property declaration fine. (in fact that's primary purpose of readonly attribute.) however, car class need provide implementation of setrpm: work @ runtime.
so given declarations provided, somewhere in car.m you'd need this:
- (void)setrpm:(nsinteger)newrpm {      _rpm = newrpm; }   note class extension can declared in enginefeedback.m if prefer.
Comments
Post a Comment