• objective-c 强弱引用、properties的学习


    一.强弱引用

    强引用:strong reference

    弱引用:weak reference

    引用可以理解为指针A指向的对象B。换句话说,拥有指针A的对象是对象B的所有者(ownership).

    区别:其中strong就相当于retain属性,而weak相当于assign

    1.一般的引用都是强引用。但为什么又提出弱引用呢?

    弱引用的提出是为了防止强引用出现reference cycle,也就是指向的死循环,如果出现死循环,容易出现内存泄漏。

    2.弱引用的特点是什么?如何使用弱引用?

    __weak BNRItem *_container;//使用“__weak”

    • 多个对象A引用某个对象B,都会retain。但是当你指定弱引用后,就不会retain。当对象引用数为0的时候,自动释放,并让把使用弱引用的指针,设置为nil
    • 当对象A使用弱引用,对象A释放空间的时候,指针会变成nil

     其他:nonatomic与atomic主要面对的是线程安全的问题,当然使用atomic更安全,获取数据更准备,使用nonatomic,会更高效,原因就是在于加锁的缘故嘛。但是苹果开发一般都使用的是nonatomic

    二.properties

    @propery NSString *itemName;

    此语句做了三件事情:一个实例变量,两个访问实例变量的方法。

    propery的属性:

    @property (nonatomic, readwrite, strong) NSString *itemName;

    • 多线程属性:有两个值,atomic和nonatomic,默认是使用atomic,但是大多数程序使用nonatomic,其实就是选择是否采用原子操作的问题。例子:@property (nonatomic)NSString *item;
    • 读/写属性:有两个值,readwrite 和readonly ,默认都是readwrite,如果选择readonly,则只有get属性。
    • 内存管理属性:有四个值,strong,weak,copy ,unsafe_unretained,这个属性主要用来描述对象的实例变量指针引用类型。

    unsafe_unretained是一个直接的assign。没有retain计数,如果变量指向的对象已经销毁了,其指针值不会自动设置为nil。但是weak属性是可以的,一般用在非对象的引用中。

    copy是复制一份数据,能够防止其他拥有者改变数据内容受到的影响

    如果你有更多的需求,则可以自己建立,setItem,item方法。

  • 相关阅读:
    Luogu5860 「SWTR-03」Counting Trees
    $NOIP1998$ 题解报告
    $NOIP1997$ 题解报告
    $NOIP2008$ 题解报告
    $NOIP2004$ 题解报告
    $NOIP2010$ 题解报告
    $NOIP2009$ 题解报告
    Luogu P1879 玉米田 题解报告
    CH301 任务安排2 题解报告
    $[NOIp2017]$ 逛公园 $dp$/记搜
  • 原文地址:https://www.cnblogs.com/lizhitai/p/4500059.html
Copyright © 2020-2023  润新知