Search code examples
objective-csynthesizer

Objective-C synthesize property name overriding


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?


Solution

  • 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