• 黑马程序猿-assign、retain、release、nonatomic、atomic、strong、weak


    都是用于修饰@property声明的变量
    assign:用于非oc对象类型,表示直接赋值(默认值)
    retain:用于mrc中,用于类属性中有oc对象的情况,表示先推断赋值的对象是否和实例对象变量的值相等。
                    若不相等则先retain在赋值。

    (即release旧值,retain新值,用于修饰对象)

    release:用于mrc中。将对象的引用计数减1
    atomic:用于多线程,保证原子性,效率低(默认)
    nonatomic:修饰不须要多线程的属性,效率高
    strong:用于arc中。强指针。用于修饰oc对象。当类属性中有对象时用其修饰。相当于mrc中的retain
    weak:用于arc中,弱指针,一般用于修饰UI控件。

    当其指向的对象被释放时,会将该对象指针的值置为nil。

                不能用__weak直接修饰一个对象指针变量,由于用其修饰后,对象以创建就要被释放
                范例:
                            __weak Person * p1 = [Person new]; //报警告。对象没有强指针指向。一创建就要被释放
    copy:用于修饰NSString和block类型的成员变量,是浅复制,不会申请新的内存空间。

    release旧值copy

                新值
    mutableCopy:用于修饰NSString和block类型的成员变量。是深复制。会又一次申请一块内存空间。


    mrc内存管理原则:谁创建谁release 。谁retain谁release
    arc内存管理原则:当一个对象没有强指针指向时,该对象就被马上释放,arc中不能调用[super dealloc]

    对象的循环引用的解决方法:人拥有一条狗,狗又有一个主人,这就是对象的循环引用
        mrc中:一端用retain,一端用assign。retain端要在dealloc方法中先release该类的对象属性
        arc中:一端用strong,一端用weak
  • 相关阅读:
    BIO、NIO、AIO有什么区别?
    java中IO流有哪些?
    List、Map、Set 三个接口,存取元素时,各有什么特点?
    Vector、ArrayList、LinkedList 的存储性能和特性?
    Java.util.Map的常用实现类有哪些?
    Java自学指南六、查一手资料
    虚拟机中Lvs配置
    m2014-software->Word2010发布博客文章至Cnblogs
    m2014-c->c模拟java的hashmap容器类
    m2014_c->c语言容器类工具列
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8282405.html
Copyright © 2020-2023  润新知