zoukankan      html  css  js  c++  java
  • OC 属性

    1 属性和实例变量 :属性 ==  实例变量声明 + setter 方法+ getter 方法

      在老版本的 OC 语言中,我们需要同时声明属性和底层实例变量,那时,属性是 OC 语言的一个新的机制,并且要求你必须声明与之对应的实例变量。

      后来,苹果将默认编译器从 GCC 转换为 LLVM(low level virtual machine),从此不再需要为属性声明实例变量了。如果 LLVM发现没有一个匹配属性的实例变量,它将自动创建一个以下划线开头的实例变量。但是生成的实例变量是私有的,子类不能访问!

    2 @property = ivar + getter +setter (ivar = 实例变量=成员变量)

        @synthesize 作用:自动生成setter方法 和 getter方法

    如果使用了属性的话,那么编译器就会自动编写访问属性所需的方法,此过程叫做自动合成(auto synthesis),这个过程由编译器在编译期执行,所以编辑器里看不到这些“合成方法”的源代码

    3 @synthesize 还有一个重要作用,可以指定与属性对应的实例变量

    例如 @synthsize name = XXX; 那么 self.name 其实操作的实例变量就是 XXX,而不是    _name.但是一般习惯写成 @synthesize name = _name;

    4 什么情况不会 auto synthesis

      *同时重写了 setter 和 getter时

      *重写了只读属性的 getter 时

      *使用了 @dynamic时

      *在 @protocol 中定义的所有属性

      *在 category 中定义的所有属性

      *重载的属性

    以上情况需要手动创建 ivar

    5 @synthesize 和 @dynamic 分别有什么作用

      @property 有两个对应的词,一个是@synthesize,一个是@dynamic。如果@synthesize和@dynamic 都没写,那么默认的就是 @synthesize var = _var;

      @synthesize 的语义是如果你没有手动实现 setter 和 getter 方法,那么编译器会自动为你加上这两个方法

      @dynamic 告诉编译器:属性的setter 与 getter方法由用户自己实现,不自动生成

    6 属性的特性

  • 相关阅读:
    ubuntu16.04安装ibus中文输入法
    apt --fix-broken install
    fuelgauge
    make flash FLASH_CONFIG=jtag_full
    使用android ndk编译boost动态库
    RK3288的gpio设置
    RK3288 GPIO 输出问题
    HDU-2586-裸LCA入门-tarjan离线
    uva-11324-SCC+dp
    HDU-2767-tarjan/Kosaraju求scc
  • 原文地址:https://www.cnblogs.com/chenbowen/p/6020367.html
Copyright © 2011-2022 走看看