zoukankan      html  css  js  c++  java
  • Objective-C 内存管理

    Objective-C中,内存对象分二类:

    1) 值类型,如 int、float、struct等基本数据类型;

    2) 引用类型,通常是指继承自NSObject类的OC对象;

     

    值类型在栈中,由系统自动管理,而引用类型在堆上,需要我们自己手工进行管理

    OC中提供了二种内存管理机制:

    1) 手动引用计数 MRC (Mannul Reference Counting);

    2) 自动引用计数 ARC (Automatic Reference Counting);

    主要区别体现在,我们写代码的时候需要自己手动添加retain/release这样的代码

    手动引用计数

    有二对关键词:

    1) alloc 与  release

    2) retain 与 release

    原则上:谁alloc谁就负责release,谁retain谁负责release

    alloc 用来创建对象,创建完成后,引用计数 +1,只调用一次

    retain 使引用计数 +1,可多次调用

    release 使引用计数 -1,可多次调用

    通常属性retainCount,可知道一个对象当前被引用的数量,当引用计数为0时,说明此对象没有被引用,它会被系统从内存中销毁,销毁之前会调用对象的dealloc

     

    自动引用计数

    在该模式下,不允许使用retain、release、retainCount等方法,并且如果对象实现了dealloc方法时,不允许调用[super dealloc]方法。

    该模式下转而替代属性(property)的修饰词为strong、weak,相当于手动引用计数下的retain、assign

     

    属性修饰符由三部分组成, @property(原子性, 存取控制性, 内存管理)

    原子性:atomic(默认值)、nonatomic

    存取控制性:readwrite(默认)、readonly

    内存管理:assign(默认)、retain,ARC中建议使用strong、weak进行替代

    copy 与strong类似,但区别在于它是对生成的副本拥有所有权而不是传入的对象

     

    autorelease这里没讲,深拷贝和浅拷贝这里也没讲,属性更没有具体深入提,这些点如果想真正搞清楚,都可以单独写一篇文章详解

  • 相关阅读:
    48-最长不含重复字符的子字符串
    51-数组中的逆序对
    字符串的排列
    二叉树转链表
    求根
    构造二叉树
    二叉树中序遍历
    反转链表系列
    斐波那契系列
    f.lux
  • 原文地址:https://www.cnblogs.com/meteoric_cry/p/4497012.html
Copyright © 2011-2022 走看看