• assign、retain、copy使用异同


      1 三者的区别

      首先,引用计数的概念:表示对象被引用的次数。当引用计数为 0 的时候,系统就会发送dealloc消息来释放内存。

      assign:用于基本数据类型,没有引用计数,因此不存在增加或减少引用计数;
      retain: 对象引用计数会+1;
      copy:

        1 可变对象为深拷贝(指针赋值且在堆里面将对象赋值一份,引用计数不变),不可变对象为浅拷贝(只对指针赋值然后引用计数+1)。所谓深拷贝就是给指针赋值且指向的对象也拷贝一份,浅拷贝只给指针赋值不拷贝对象。

        2 可变与不可变对象的转变:不可变对象→可变对象的转换:对象.mutableCopy。可变->不可变:对象.copy;

        3 为什么可变对象与不可变对象有深浅拷贝之分呢?很简单,出于对节省内存的考虑。对于不可变对象,因为它不可变,所以无论有多少使用者,都是同一份东西,那么我只要在内存中保留一份即可。而对于可变对象,假设甲乙都引用了A,甲改变了A,如果乙再使用可能就会引起错误。——原因是个人猜测

        4 最后,深浅拷贝这种说法可以区分两种拷贝,只是一种叫法,但是刚接触让人很迷糊。

      2 释放方法

      release:对象引用计数-1,如果为 0 则发送 dealloc 释放内存;

      autorelease:只是把对象放入自动释放池,这是一个编译器属性,编译器会在合适的地方调用autorelease。 MRC 与 ARC:手动管理内存和自动管理内存,(先说下引用计数)手动管理需要程序员调用 retain release 等方法来手动管理内存。自动管理是把对象指针放进自动释放池,当自动释放池被销毁时发送 release 消息,引用计数-1,如果减为0则系统自动发送dealloc释放内存。另外,Core Foundation的对象为C对象,自动释放池不会接管,需要另一套:CFRetain与CFRelease。

  • 相关阅读:
    linux 卸载软件
    RYU基础整理
    FlowVisor相关
    RYU的GUI安装
    Ubuntu下apt-get与pip安装命令的区别
    mininet安装,使用
    Java中的Enum(枚举)用法介绍
    jquery选择器大全参考
    Oracle数据库SQL语句操作大全汇总
    SQLServer数据库语句大全汇总
  • 原文地址:https://www.cnblogs.com/mddblog/p/4754092.html
Copyright © 2020-2023  润新知