Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between using properties and not for accessing ivars

Specific performance and behaviour difference using properties or accessing the ivars directly.

For Global variables, What is the difference between using this:

@interface myClass (){

    UIImageView *myView;
}

-(void)loadView{

  [super loadView];
  myView = [[UIImageView alloc] initWithFrame:CGrectMake(0,0,100,100)];
}

And doing this:

    @interface myClass (){

    }

    @property (nonatomic, strong) UIImageView *myView; 

@synthesize myView = _myView;

    -(void)loadView{

    [super loadView];
    myView = [[UIImageView alloc] initWithFrame:CGrectMake(0,0,100,100)];
    }

What benefits can we have with every approach? What are the reasons to recommend to always uses properties?

like image 723
Antonio MG Avatar asked Mar 15 '12 14:03

Antonio MG


2 Answers

In the first case, your instance variable (or ivar) myView is private to the class and cannot be accessed by another class.

In the second case, you have provided a property that allows other classes to access your ivar via synthesized accessors. The alternative to declared properties is to write your own accessor methods. The @synthesize notation does that for you.

See Apple documentation on declared properties

like image 199
FluffulousChimp Avatar answered Oct 14 '22 03:10

FluffulousChimp


ALWAYS create a @property for every data member and use self.name to access it throughout your class implementation. NEVER access your own data members directly.

Here are some of the reasons to use Properties:

  • Properties enforce access restrictions (such as readonly)
  • Properties enforce memory management policy (retain, assign)
  • Properties are (rarely) used as part of a thread safety strategy (atomic)
  • Properties provide the opportunity to transparently implement custom setters and getters.
  • Having a single way to access instance variables increases code readability.

You can also check out: The Code Commandments: Best Practices for Objective-C Coding

like image 45
Injectios Avatar answered Oct 14 '22 03:10

Injectios