I am trying to understand the purpose of the synthesize
directive with property name overriding. Say that I have an interface defined as follow:
@interface Dummy ... {
UILabel *_dummyLabel;
}
@property (retain, nonatomic) UILabel *dummyLabel;
And in the implementation file, I have:
@synthesize dummyLabel = _dummyLabel;
From what i understand, "dummyLabel" is just an alias of the instance variable "_dummyLabel". Is there any difference between self._dummyLabel and self.dummyLabel?
Yes. self._dummyLabel
is undefined, however _dummyLabel
is not.
Dot syntax expands out to simple method invocations, so it's not specific to properties. If you have a method called -(id)someObject
, for example in the case of object.someObject
, it will be as if you wrote [object someObject];
.
self.dummyLabel //works
self._dummyLabel //does not work
dummyLabel //does not work
_dummyLabel //works
[self dummyLabel]; //works
[self _dummyLabel]; //does not work