美文网首页
Object-C常用属性关键字整理

Object-C常用属性关键字整理

作者: 才不是想成为啊 | 来源:发表于2016-04-01 13:51 被阅读310次

    我们在OC中定义变量,可以自己来定义变量的setter方法来设置变量值,用getter方法来获取变量值。但是当变量数量增多时,还采用手动添加setter/getter方法来操作变量,就会使得程序代码量大大增加
    幸好从OC 2.0开始,我们能让系统自动生成设置变量值的方法或获取变量值的方法,即系统会自动为我们生成setter/getter方法。这种功能大大减少了代码量,让我们有更多的精力放在程序的业务逻辑上。为了使设置变量值的功能更加完善,OC使用@property来标识属性。例如变量可分为只读变量,那么变量的属性为readonly,其中有些属性比较好区分,但还有一些属性assign、copy等属性却让人有些困惑


    先来看看@property的语法 变量的声明语法为:

    @property(attribution)Vartype  Varname;//属性在()里来定义,然后是变量类型、变量名。
    

    OC提供的属性有:

    读写属性: (readwrite/readonly)以及(getter=name)、(setter=name)
    
    setter语意:(assign/retain/copy)
    
    原子性: (non)atomic
    

    1.原子性

    atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作
    atomic 设置成员变量的@property属性时,默认为atomic,提供多线程安全。

                在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
                        {lock}
                                if (property != newValue) { 
                                        [property release]; 
                                        property = [newValue retain]; 
                                }
                        {unlock}
    

    nonatomic 禁止多线程,变量保护,提高性能。
    atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择

    2.读写属性:

    readonly 表示只读,也就是只会生成get方法.
    readwrite 表示可读可写,默认是readwrite,表示既可以赋值,也可以被赋值
    getter/setter=name,是为(getter)/(setter)方法使用name指定的名称,而不是实例变量名称

    3.setter语意:

    setter语意assign/retain/copy 决定了以何种方式对数据成员赋予新值。对于Objective-C中的一般object,最好使用用retain。一些特别的object(例如:string)使用copy。
    而assign关键字代表setter直接赋值,而不是复制或者保留它,更不需要进行引用计数。这种机制非常适合一些基本数据类型,比如NSInteger和CGFloat,或者你并不直接拥有的

    copy与retain的具体区别为:copy其实是建立了一个相同的对象,而retain只是保存其对象,并且其计数值+1。
    例如:一个NSString对象,地址为0×1000,内容为@”string” 
    copy到另外一个NSString之后,地址为0×2000,内容相同,新的对象retain为1,旧有对象没有变化 
    retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,但是这个新对象的retain值+1,并释放旧的对象。
    也就是说,retain是指针拷贝,copy是内容拷贝
    

    相关文章

      网友评论

          本文标题:Object-C常用属性关键字整理

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