Error accessing generated ivars when I override setters and getters in Modern Objective-C Error accessing generated ivars when I override setters and getters in Modern Objective-C ios ios

Error accessing generated ivars when I override setters and getters in Modern Objective-C


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


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.


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