I know now the new Objective-C compiler lets you not need to synthesize your properties anymore. I have one file that has two classes in it. My .h for a simple helper clas
If you override both the setter and the getter, the compiler will not automatically create the instance variable for you anymore. You can add it to your class implementation like so:
@implementation ClassName {
ViewFrameModel *_viewFrameModel;
}
...
@end
To summarize the answers:
If you override both the setter and the getter, the compiler will not create the instance variable for you.
Why? In that case, the compiler assumes that the property is dynamic: that it might be a property that relies on other properties for storage / computation, or that it will be created in other ways, for example, at runtime using Objective-C runtime functions.
To help the compiler understand the situation better there are two potential solutions:
@implementation Class {
@synthesize property = _property;
...
@end
or
@implementation Class {
PropertyClass *_property;
}
...
@end
Here is the results of some testing I did last year: iOS automatic @synthesize without creating an ivar.
In short, you need to use @synthesize or declare an iVar explicitly.