zoukankan      html  css  js  c++  java
  • OC系列高级-内存管理关键字

    一.MRC中@property关键字

    1.set方法处理

    assign:直接赋值,默认值

    retain:先release原来的值,再retain新值

    copy:先release原来的值,再copy新值

    2.原子性

    atomic:对属性加锁,多线程下线程安全,默认值

    nonatomic:对属性不加锁,多线程下不安全,但是速度快

    3.读写属性

    readwrite:生成getter和setter,默认值

    readonly:只生成getter

    4.setter和getter

    这两个关键字用于给setter和getter方法另外起一个名字

    例如:@property(setter = a:,getter = b)int age;相当于取值方法名为b,设值方法名为a

    二.自动引入计数器ARC

    ARC模式下,创建的新对象由以下关键字来限定

    _strong:由_strong修饰的为强指针,对象只要有强指针指向就不会被销毁,每当一个强指针指向一个对象,该对象的RC+1

    _unsafe_unretained:这个修饰的对象不会改变RC值,只表示对对象的引用,当所指向的对象销毁时,该指针不会变为nil,仍保留原有的地址

    注意点:

    1.在ARC模式下,MRC的retain和release等方法不可用,  ARC模式下,@property关于内存管理的修饰符为strong和weak,(MRC下的retain和assign不可用),表示声明为强指针还是弱指针,通常情况都是strong,但是在循环引用却不是

    2.在MRC模式下,将一个对象赋值给另一个对象

            Person *p1 = [Person new];
            Person *p2 = [Person new];
            //p2失去对对象的控制权时要先release
            [p2 release];
            p2 = p1;
    

     三.总结

    内存管理只针对对象而言,在MRC模式下,OC通常使用retain关键字,非OC对象通常使用assign关键字,但是循环引用是一个例外,通常需要一端使用retain,一端使用assign,在ARC模式下,OC对象通常使用strong,非OC对象通常使用assign关键字,循环引用是一个例外,通常一端使用strong,一端使用weak

    未来的你会感谢今天努力的自己 ------Alen
  • 相关阅读:
    关于ng路由的传参问题(传递一个,多个参数)
    ng指令控制一个元素的影藏的与显示几种方法的使用
    将一个对象push到数组之中的几点问题
    关于ng的路由的几点想法(ui-view)
    angularJS自定义一个过滤器
    ng自带的表单验证
    实现标签的添加与删除(tags)
    关于ng-class,ng-style的用法
    5分钟搞懂:session与cookie
    前端浏览器的两种缓存:协商缓存和强缓存
  • 原文地址:https://www.cnblogs.com/kaihuacheng/p/5631215.html
Copyright © 2011-2022 走看看