I've only been in the Objective-C & Cocoa world for a year, so I wasn't around when properties weren't automatically synthesized
Whenever I create new classes in our project, I can declare @property BOOL testFlag
without declaring an instance variable. Then, in the implementation, I could either call self.testFlag
, [self testFlag]
, [self setTestFlag:NO]
. But, I could also call _testFlag
. I always assumed because properties are automatically synthesized with instance variables, that's why I can just append a "_" underscore before the property name to directly access the instance variable.
However, I have been refactoring really old files, that clearly were created before auto-synthesizing was a thing
So now in the header, I'd see something like this:
@interface testClass
{
BOOL _testFlag
}
@property BOOL testFlag;
In the implementation, there could be a custom setter/getter:
@implementation testClass
@synthesize testFlag = _testFlag;
-(void)setTestFlag:(BOOL)testFlag
{
_testFlag = testFlag;
}
-(BOOL)testFlag
{
return _testFlag;
}
But I thought because of auto-synthesizing, I could remove the _testFlag
declaration in the header, and I could remove the @synthesize
in the implementation. But when I do this, there are just a truck ton of errors; wherever somebody was directly trying to access the ivar _testFlag
. (This actually includes the custom getter/setter above ^^, too)
Is there perhaps something I am missing with the project settings that prevent this old file from generating an implied instance variable for properties?