什么是属性?
属性是事物实体的特征。
变量用于存储属性的值,没有对象变量做存储是不可以称之为属性的。
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中的变量声明