美文网首页
修饰词用法

修饰词用法

作者: quanling | 来源:发表于2020-09-16 11:27 被阅读0次

    ARC:assign、weak、strong、copy

    MRC:assign、retain、copy、nonatomic、atomic

    assign :  赋值

    1.直接赋值,例如:int, float...等使用

    2.没用使用其他(weak, strong,copy,retain)时,默认为assign修饰

    3.对象使用assign,计数器不会+1(与strong的区别);当对象销毁时,指针不指向nil,会出现野指针(与weak的区别)

    weak:弱

    1.弱指针,修饰对象使用,不可用于数据类型(int,float...)

    2.weak修饰时,计数器不会+1,直接赋值

    3.weak是为了打破循环应用而生,常用于修饰Block,不会对block内的使用对象的引用计数+1,因此不会导致内存泄漏

    4.他的引用对象被销毁时,指针会指向nil,不会出现野指针

    strong:强

    1.强指针,直接赋值,并且计数器+1

    2.在ARC中代替了retain的作用

    retain:保持

    1.release 旧对象( 旧对象计数器 -1 ) , retain 新对象( 新对象计数器 +1 ) , 然后指向新对象 .

    2.set方法如下:

    if(_some != nil){

        [_some release];

    };

    _some = [some retain];

    copy:拷贝

    1.copy 在 MRC 时是这样做的 release 旧对象( 旧对象的引用计数器 -1 ) , copy 新对象( 新对象的引用计数器 +1 ) , 然后指向新对象 .(新对象是指最终指向的那个对象,不管深拷贝还是浅拷贝)

    if (_dog != nil)

    {

    [_dog release];

    }

    _dog = [dog copy];

    2.copy 在 ARC 时是这么干的 copy 新对象( 新对象的引用计数器 +1 ) , 然后指向新对象 

    _dog = [dog copy];

    3.修饰的属性本身要不可变的。例如 NSMutableArray 采用 copy 修饰 , 在addObject时会出现Crash, 因为NSMutableArray的对象在copy 过后就会变成NSArray。如果需要copy NSMutableArray对象,用:mutablecopy。

    nonatomic:非原子属性

    1.不对set方法加同步锁 .

    2.性能好

    3.线程不安全

    atomic :原子属性

    1.原子属性就是对生成的 set 方法加互斥锁 @synchronized(锁对象) .

    @synchronized(self) { _delegate = delegate;}

    2.需要消耗系统资源 .

    3.互斥锁是利用线程同步实现的 , 意在保证同一时间只有一个线程调用 set 方法 .

    4.其实还有 get 方法 , 要是同时 set 和 get 一起调用还是会有问题的 . 所以即使用了 atomic 修饰 还是不够安全 .

    readonly (只读)

    1.让 Xcode 只生成get方法 .

    2.不想把暴露的属性被人随便替换时 , 可以使用 .

    readwrite (读写)(默认)

    1.让 Xcode 生成get/set方法 .

    2.不用 readonly 修饰时 , 默认就是 readwrite .

    相关文章

      网友评论

          本文标题:修饰词用法

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