objective-cpropertiesinstance-variablessynthesize

Preventing Automatic ivar Synthesis of @property


I have readonly properties that I would like to declare similarly to other properties:

@property (nonatomic, readonly) MyThing *thing;

Frequently, I definitely do not want an instance variable and getter method to be automatically synthesised for these properties. In such cases I have made an error if I forget to write an explicit getter for them, and I want the compiler to tell me and refuse to compile (or at least, issue a warning).

In such cases, is it bad practice to use a @property declaration? Should I instead use:

-(MyThing*) myThing;

Or, alternatively, is there some way that I can tell @property in the attributes list (nonatomic, readonly, dont_synthesize_this_one_please) that I definitely don't want an instance variable to be sythesized and it's an error if I've missed out the getter?


Solution

  • No, there is no special attribute. If you don't overwrite the getter, the ivar will be synthesized.

    Making the property a normal method as you suggest is the best solution. You could also experiment with turning on the following compiler warning:

    Implicit Synthesized Properties

    but then you will get warnings for ALL the synthesized properties.

    You can also turn it on for every file separately -Wobjc-missing-property-synthesis