iOS属性

2018-04-20  本文已影响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最好,因为后者效率高一些。

上一篇下一篇

猜你喜欢

热点阅读