Search code examples
objective-csyntaxdeclared-property

Is there a difference between setting a property with the dot or the bracket syntax?


Given the property declaration below, does method (A) work in exactly the same way as method (B)? I just want to check that self.yellowViewController = yellcon_New; is going via my setter, so that the old objects gets released and the new one retained.

// INTERFACE
@property(nonatomic, retain) YellowViewController *yellowViewController;

// IMPLEMENTATION (A)
self.yellowViewController = yellcon_New;

// IMPLEMENTATION (B)
[self setYellowViewController:yellcon_New];

Solution

  • All of this is correct :

    self.yellowViewController = yellcon_New;
    

    And

    [self setYellowViewController:yellcon_New];
    

    Work the same. I would like to add something interesting : when you use

    yellowViewController = yellcon_New;
    

    you associate directly the value to the ivar, without going through your setter methode.

    So if you have

    -(void)setYellowViewController:(YellowViewController*)theYellowViewController;
    {
        NSLog(@"Setting the yellow view controller");
        [yourWife askFor:beer];
        ...whatever...
        ...set the yellowViewController (retain in your case)
    }
    

    Calling

    self.yellowViewController = yellcon_New;
    

    and

    [self setYellowViewController:yellcon_New];
    

    will use the setter method (and log the message, and make your wife bring you some beer)

    but

    yellowViewController = yellcon_New;
    

    will not.

    It's interesting to know this in some cases.