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:非对象类型,基本数据类型,包括结构体和枚举。

  • 相关阅读:
    Canvas 与 Image 相互转换
    oracle随笔
    QueryTask,FindTask,IdentifyTask三种查询的区别
    mysql命令
    mysql
    Delphi声明Record变量后直接初始化
    delphi实现映射和断开网络驱动器
    delphi的ArrayList
    Delphi判断一个文件是不是JPG图片
    Delphi 停靠技术的应用3(两个窗体停靠成PageControl样式, 分页停靠)
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154205.html
Copyright © 2011-2022 走看看