iOS - 私有成员变量,私有属性的写法选择

来源:互联网 发布:阿里云客服培训中心 编辑:程序博客网 时间:2024/05/21 20:27

在某一类的中声明私有成员变量发展历程:
早期只能定义在.h头文件中,使用@private关键字来让这个成员变量变成私有

@interface ViewController (){    @private    BOOL _isBool;}@end

之后,允许在.m文件中添加一个匿名的Category,用来添加属性

@interface ViewController ()@property(nonatomic,assign)BOOL isBool;@end

2013年WWDC进一步改进,允许在.m的@implementation 中直接添加类的私有变量

@implementation ViewController{    BOOL _isBool;}

目前为止已经很少有人采用第一种方式,变量完全暴露在外部,并且影响可读性。主要纠结在于什么时候该用第二种,什么时候该用第三种,两者区别在哪里。


属性(@property):
一共做了三件事情:创建实例变量,生成setter方法,getter方法。在ios5之前,还需要在.m文件中使用@synthesize关键字生成setter,getter方法。

实例变量:仅仅创建实例变量,需要手动去创建。


总结:属性会自动生成setter,getter方法,有的时候就会生成一些无用的方法,造成程序的IPA体积过大。使用成员变量的方式(_isBool)运行的速度更快。

当开发使用懒加载(变量在需要的时候再去加载)的时候:

- (BOOL)isBool{    if (!_isBool) {        _isBool = NO;    }    return _isBool;}

一般会使用@property的方式。

建议:在不需要使用懒加载的时候,直接在.m文件中使用_XXXXX的方式创建实例变量,来减小IPA体积,提高程序的运行速度,尽量减少两者混用的情况。
但是一般情况下,我们开发的APP并不需要进行很大程度上的深度优化,所以两者皆可。多人协同开发时,尽量统一规范。


个人总结,有不足之处,希望不吝赐教。

2 0
原创粉丝点击