zoukankan      html  css  js  c++  java
  • (四十六)内存管理的复习

    ARC的准则是:只要没有强指针指向对象,就会被销毁。

    Tip:不写__weak的都是强指针。


    一般对象用strong的目的是为了当前对相在,维护的这个成员也在。

    注意循环引用应该一端用weak,一端用strong。

    Tip:iOS5以前的retain和现在的strong是一个类型。


    一些遗留问题:

    1.UI控件的引用使用weak的原因:

    控制器的view是强指针指向UIView,UIView内部有一个Subviews数组,这个数组也是强指针,在数组内存放的是对象的指针,也就是有一个强指针指向UI控件。

    也就是说控制器在,UIView就在,Subviews在,UI控件就在,因此UI控件用weak和strong都可以。

    使用weak能更好的保护内存,能用弱指针尽量用弱指针。


    2.代理用weak的原因:

    Tip:iOS5以前的assign就相当于现在的weak。

    因为一般控件的代理都是控制器,以tableView为例,如果控制器强指针指向tableView,而tableView的代理再强指针指向控制器,就会引发无法释放的问题。

    Tip:只要强指针构成环就无法销毁沿途各个对象。


    3.copy属性:

    复制分为深复制和浅复制(笔试题经常考)。

    Tip:笔试常考@property用 copy、weak、strong、assign、retain还有OC语法等。


    总结:

    weak(原来的assign):代理、UI控件

    strong(原来的retain):其他对象(除去字符串以外的普通OC对象)

    copy:字符串

    assign:非对象类型,基本数据类型,包括结构体和枚举。

  • 相关阅读:
    AJAX 大全
    has value '1.8', but '1.7' is required
    VS2010官方下载地址
    win10桌面显示我的电脑
    使用 CAST
    for循环+canvas实现黑客帝国矩形阵
    C# Lambda
    win7系统部分便笺的元数据已被损坏怎么恢复
    SQL查询所有表,所有列
    truncate和delete之间有什么区别
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154205.html
Copyright © 2011-2022 走看看