属性
- AFNetworking已经全部使用属性,包括初始化和对外的只读属性(内部增加一个同名的读写属性)。
- 一开始比较麻烦,需要自己实现getter和setter函数
- 后来需要用一个关键字来关联一下,就能提供默认的getter和setter函数,方便里一步
- 现在可以直接使用,在使用方便性上已经和成员变量差不多了
- 属性的本质是函数,与成员变量有本质区别,但作用和成员变量一样
- 可以作为对外接口,用点语法调用,比较方便
- 一般用类扩展定义私有的属性
带_的成员变量
- 现状还是有很大的比例在用成员变量
- 直接的变量访问,不需要getter和setter函数的开销,性能据说有提升
- 私有的,不担心外部被修改
选择的建议
- AFNetworking还是很有代表性的,倾向于用属性
- 只读属性在初始化的时候可以用同名的带_的成员变量,这样就不用多定义一个属性了,稍微省力一点
- 当然也可以像AFNetworking一样,对于只读属性,在内部定义一个同名的读写属性。这是推荐的做法。
- getter和setter函数用系统默认生成的,不自定义。逐渐把属性看做变量来用,提高方便性:内部肯定能用,外部的要用的话,暴露出去就可以了。
- 避免在getter和setter函数中做一些额外的自定义工作。这种系统默认调用不可控。还是老老实实对外增加一个功能型的方法比较好。
- 对外接口统一为方法,属性也是方法,只是看起来和用起来像变量那么方便而已。
- 属性的懒加载有必要的时候再用。一般在页面加载后统一在一个地方进行属性的初始化工作。
- 页面元素的布局应该在其他的地方进行,跟初始化分开,提高内聚性