OC中的属性

什么是属性?

属性是事物实体的特征。

变量用于存储属性的值,没有对象变量做存储是不可以称之为属性的。

accessor中由setter和getter控制对象变量的读写许可,以及在读写时造成上下文的影响,可以是修改了其它的变量值,又或者是执行了某些操作。

属性必具有setter和getter之一以表明只可写或只可读或可读写,均不具有的属性是毫无意义的。

那么从哲学思辨而言,我认为只有对象变量和accessor共同作为属性的两个必要构成。两者缺一则不可以称之为属性

但是从编程语言来看,我认为属性分为声明,实现两部分,实现又分为存储和accessor两部分。

 

OC中的属性声明

一是在编译时的实现,

 

OC中的Extension所在.h作为单独文件时的使用方法

一般的应用场景中,我们多把Extension的声明直接置于Original.m中。昨晚跟同事扯到了扩展作为单独文件存在的问题,我写了下代码,代码注意点如下:

Entity在Original和Extension两个文件中做了描述,Extension.h扩展头文件, Orignal.h/m原类文件, Util使用该实体的第二方。

Extension.h添加了变量\属性\方法

1. Extension的声明必须在原类声明之后, 即Extension.h引用Original.h。

2. 按照Extension的定义,是不能存在Extension.m的。因此,Extension的属性实现中的accessor方法实现必须在Original.m中实现。

3. Original.m中引用Extension.h,并实现accessor方法和其它扩展方法

4. 使用方Util类在.h或.m中导入头文件Extension.h以获取所有属性获方法的声明。然后使用相关属性和方法。

 

为什么我们要把扩展作为单独文件而剥离出来呢?或许有如下解释:

1. 将类拆分成块,以区分不同的特性组,并且可以在不同块中添加自动实现的属性(这是类别所做不到的),比如Extension1.h, Extentnsion2.h......ExtensionX.h

2. Extension中重声明的同名属性可采用与Original.h中属性更高(只能高于原声明)的访问权限

3. 其于1,2中做到的功能拆分,对不同的应用方公布不同的Extension。

以上所说区分拆块只指编译时检查,实际上,不同Extension?或者是Original的引用中,均可强行调用实现的所有方法或属性(persorm, msg_send)

 

 

 

 

OC中Extension中的变量声明

 

posted @ 2016-01-05 21:59  MittyoO  阅读(358)  评论(0编辑  收藏  举报