美文网首页
关键字(@property属性)(I)

关键字(@property属性)(I)

作者: Harely | 来源:发表于2019-10-20 10:32 被阅读0次

    nonatomic和atomic

    • nonatomic:不使用同步锁,非原子性
    • atomic:使用同步锁,原子性

    属性声明为atomic时,在该属性在调用getter和setter方法时,会加上同步锁(也叫互斥锁@synchronized)。
    即在属性在调用getter和setter方法时,保证同一时刻只能有一个线程调用属性的读/写方法。保证了读和写的过程是可靠的。
    但并不能保证数据一定是可靠的。

    理由如下图:


    数据不可靠

    retain

      retain到另外一个对象之后,地址是不会变化的,地址也为0x1111,实质上是建立一个指针,也就是指针拷贝,内容也是相同的,retain值会加1。

    - (void)setName:(NSString *)name{
        if (_name != name) {
            [ _name release];
            _name = [name retain];
        }
    }
    - (NSString *)name{
        return [[ _name retain] autorelease];
    }
    

    copy

      copy建立一个相同的对象,如果一个NSString对象,假如地址为0x1111,内容为@"hello",通过Copy到另一个对象之后,地址为0x2322,内容也相同,而新的对象retain为1,旧的对象是不会发生变化。

    内部实现

    - (void)setName:(NSString *)name{
        if (_name != name) {
            [ _name release];
            _name = [name copy];
        }
    }
    - (NSString *)name{
        return [[ _name retain] autorelease];
    }
    

    assign

    内部实现

    - (void)setName:(NSString *)name{
        _name = name;
    }
    
    
    - (NSString *)name{
        return _name;
    }
    

    weak

    weak 实现原理

    野指针,僵尸对象,空指针详解

    相关文章

      网友评论

          本文标题:关键字(@property属性)(I)

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