• 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 属性的特性

  • 相关阅读:
    iOS Sprite Kit最新特性Physics Field虚拟物理场Swift測试
    java中接口的定义与实现
    2014年百度之星程序设计大赛
    MyEclipse7.0破解下载
    C++中的explicitkeyword
    抽象工厂模式
    《Head First 设计模式》学习笔记——策略模型
    MFC原创:三层架构01(人事管理系统)DAL
    Design Pattern Singleton 单一模式
    C学习笔记之预处理指令
  • 原文地址:https://www.cnblogs.com/chenbowen/p/6020367.html
Copyright © 2020-2023  润新知