//ViewController.h
@interface ViewController : UIViewController {
    NSInteger a;
}@property (nonatomic,assign) NSInteger b;@end//ViewController.m
@interface ProductsViewController () {
    NSInteger c;
}@property (nonatomic,assign) NSInteger d;@end
a、b、c、d的差别是?
最近觉得,公开的放在b处,私有的放在d处 比较好。主要是当有block时,建一个__weak ViewController weakSelf = self,里面的东西都能点出来。而a、c处必须一个个建__weak。对吗?

解决方案 »

  1.   

    a是成员变量,我一般不用这种方式。公开的变量我像b那样定义为一个对外提供的属性,私有的就像d那样,在.m里建立一个匿名类别,c的方式我也不怎么用。你应该看看成员变量和属性之间的差别:属性@property本质上可以说是让外部类访问本类的成员变量,它会自动设置getter和setter方法。
      

  2.   

    a和c我基本上都不用,只用b和d,如果需要对外开放的属性的就放在b,不需要的话直接在d位置定义,方便快捷,而且这两处定义的写法一致,如果要移动直接剪切过去就好了.没有非常严格的要求基本上就可以了,再说了,在objective-c中没有严格意义上的私有变量,基本上所有的变量在外部都有方法可以访问到.另外如果是大型公司的话应该会有规范,什么样的类型需要定义在哪个位置都会有说明a和c我觉的应该是为了兼容早期版本的写法,为了让你自己定义属性对应的内部变量,但是在arc之后的版本中,你只要定义一个属相,xcode会自动帮你定义一个以下划线打头的和属性同名的内部变量,所以你不需要另外再定义了.
      

  3.   


    另外想问一下,像b、d那样定义,使用上_b和self.b,哪个更合理一点呢,self.b是不是更慢一点?
      

  4.   

    谢谢 另外想问一下,像b、d那样定义,使用上_b和self.b,哪个更合理一点呢,self.b是不是更慢一点?
      

  5.   

    当然要用self.b了,_b是直接取值的,有时候会有问题,self.b是通过属性的getter和setter访问的,两者有本质上的区别
      

  6.   

    谢谢 另外想问一下,像b、d那样定义,使用上_b和self.b,哪个更合理一点呢,self.b是不是更慢一点?

    我一般是通过self的方式去访问,除非是在getXX方法里(在getXX方法里还用self的话,会造成死循环),用self的方式可以明确的看到self,避免在block里循环引用,以及可以使用懒加载 
      

  7.   

    看看这篇文章相信会对你理解有帮助。
    http://weibo.com/p/1001603749364681033245
      

  8.   

    a 为protective, 可继承蛋对象不能调用
    b 为public, 可继承对象可调用
    c,d 均为private, 不可继承对象也不能调用b 和 d 可以用 self.来访问, a和c不能。 可以参考我的一篇博文: http://blog.sina.com.cn/s/blog_a841894b0101ekx2.html