zoukankan      html  css  js  c++  java
  • 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中的变量声明

  • 相关阅读:
    Java知识15 Number&Math类【多测师】
    python callable()方法实例
    高级super实例
    高级any、for组合用法
    python 字典update、setdefault、pop方法案例
    一个经典的python字典生成式案例
    一个发挥到极致的yield案例
    python map使用
    Python yield详解
    django __path__使用
  • 原文地址:https://www.cnblogs.com/hushuai-ios/p/5103911.html
Copyright © 2011-2022 走看看