使用属性与不访问ivars之间的区别

Ant*_* MG 6 iphone objective-c ios

使用属性或直接访问ivars的特定性能和行为差异.

对于全局变量,使用它有什么区别:

@interface myClass (){

    UIImageView *myView;
}

-(void)loadView{

  [super loadView];
  myView = [[UIImageView alloc] initWithFrame:CGrectMake(0,0,100,100)];
}
Run Code Online (Sandbox Code Playgroud)

这样做:

    @interface myClass (){

    }

    @property (nonatomic, strong) UIImageView *myView; 

@synthesize myView = _myView;

    -(void)loadView{

    [super loadView];
    myView = [[UIImageView alloc] initWithFrame:CGrectMake(0,0,100,100)];
    }
Run Code Online (Sandbox Code Playgroud)

每种方法都有什么好处?建议总是使用属性的原因是什么?

Flu*_*imp 4

在第一种情况下,您的实例变量(或ivar)myView是该类的私有变量,不能被其他类访问。

在第二种情况下,您提供了一个属性,允许其他类通过合成访问器访问您的 ivar。声明属性的替代方法是编写您自己的访问器方法。符号@synthesize可以为你做到这一点。

请参阅有关声明属性的 Apple 文档