iOS属性

作者: 和女神经常玩 | 来源:发表于2018-04-20 20:15 被阅读0次

    属性与实例变量的区别:

    属性无法直接访问对象的内部状态,但提供了访问这类数据的的方便机制

    1.属性声明

    语法:

    @property (特性) 属性类型 属性名称;

    作用:

    声明会设置与属性关联的getter/setter方法的特性,但无法生成真正的方法定义

    特性:

    2.属性定义

            包括:getter方法和setter方法的定义,实例变量的声明,并在getter/setter方法中使用这个实例变量

    定义属性的方式:

        a.显示定义:

            getter/setter方法必须遵循其命名规则,实例变量应该遵循其命名惯例

        b.通过关键字补全:

            语法:@synthesize 属性名称 [= 实例变量名称];

            说明:[= 实例变量名称]为可选项。

                若缺省,则编译器根据命名惯例自动生成实例变量名称,否则,编译器使用该实例变量名称。

        c.动态生成

        略

        d.自动补全

            编译器可以自动补全以下已声明的属性:

                1).没有使用关键字补全的属性

                2).不是动态生成的属性

                3).没有用户编写getter和setter方法的属性

    3.由属性支持的实例变量

        命名惯例:实例变量的名称是属性名称前加下划线

    4.属性的访问/设置

        两种机制:访问器/设置器方法,点语法。

            a.访问器/设置器方法:

                访问器:与属性名称相同。

                设置器:名称以set开头,后跟首字母大写的属性名。

            b.点语法:

                myobject.属性的名称。 实际上是调用访问器方法。

                myobject.属性的名称 = 输入值。 实际上是调用设置器方法。

            注:若含有属性对象还没有完全创建好,就不要使用这些机制,而是(在内部)使用实例变量。

    附:atomic的意思就是setter/getter这个函数是一个原语操作。如果有多个线程同时调用setter的话,不会出现某一个线程执行setter全部语句之前,另一个线程开始执行setter情况,相当于函数头尾加了锁一样。 nonatomic不保证setter/getter的原语行,所以你可能会取到不完整的东西。 比如setter函数里面改变两个成员变量,如果你用nonatomic的话,getter可能会取到只更改了其中一个变量时候的状态。

    atomic是线程安全的,nonatomic是线程不安全的。如果只是单线程操作的话用nonatomic最好,因为后者效率高一些。

    相关文章

      网友评论

          本文标题:iOS属性

          本文链接:https://www.haomeiwen.com/subject/txizkftx.html