目录:

1,自动引用计数的定义

2,强引用和弱引用

3,类比手动引用

4,循环引用

5,CoreFoundation

内容:

自动引用计数的定义:

(Automatic Reference Counting) 在编译时自动在合适的位置加入retain 和 release,简化内存管理,自动引用计数不是内存管理,而是通过强引用(__strong)和弱引用(__weak)指针来标记内存的管理方式,当指向对象的强引用指针数等于0时,内存才会释放。

强引用和弱引用:

__strong, 当我创建一个oc类型时,默认的就是strong.

__weak, 当weak类型的指针指向的对象被释放后,指针会自动设置成nil.

注意:assign修饰的属性时,功能类似于weak,但其对象被释放后不会设置成nil. 还有retain相当于strong,但是用于手动计数。

类比手动引用:

在自动引用计数里,我不能手动调用dealloc,retain, release, autorelease 和 retainCount.

循环引用:

自动引用计数不是万能的,当出现循环引用时,内存不会被释放,比如当定义了两个类型A 和 B,A中的某个属性指向B的对象,B中的属性指向A的对象,当我们完成相关逻辑后,把A和B的对象设置成nil,这时你会发现两个对象并没有被释放,这时我应该把其中一个类的属性设置成weak,assign 或 unsafe_unretained.

相关的控制权如下:

  • assign implies __unsafe_unretained ownership.
  • copy implies __strong ownership, as well as the usual behavior of copy semantics on the setter.
  • retain implies __strong ownership.
  • strong implies __strong ownership.
  • unsafe_unretained implies __unsafe_unretained ownership.
  • weak implies __weak ownership.

CoreFoundation:

自动引用计数只能管理oc对象,对CoreFoundation里的对象就无能为力了,但有另外一些规则:

__bridge  - OC 和 CF对象可以相互转换,但不影响引用,就是说控制权没有转移。

__bridge_retained - OC转成CF对象,CF管理内存 (CFRelease)

__bridge_transfer - CF转成OC对象, OC管理内存

OC中的自动引用计数的更多相关文章

  1. OC - ARC(自动引用计数)

    1.什么是自动引用计数? 顾明思义,自动引用计数(ARC,Automatic Reference Counting)是指内存管理中对引用采取自动计数的技术. 在OC中采用ARC机制,让编译器来进行内存 ...

  2. Swift基础语法-内存管理, 自动引用计数

    1. 工作机制 Swift和OC一样,采用自动引用计数来管理内存 当有一个强引用指向某一个对象时,该对象的引用计数会自动+1 当该强引用消失时,引用计数会自动-1 当引用计数为0时,该对象会被销毁 2 ...

  3. OC基础15:内存管理和自动引用计数

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...

  4. swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  5. Swift2.1 语法指南——自动引用计数

    原档: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programm ...

  6. swift学习笔记之-自动引用计数

    //自动引用计数 import UIKit /*自动引用计数(Automatic Reference Counting) 防止循环强引用 Swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用 ...

  7. swift:自动引用计数ARC

    Swift自动引用计数:ARC    原文链接:https://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/chapte ...

  8. 自动引用计数(ARC)

    1.1什么是自动引用技术 顾名思义,自动引用计数(ARC, Automatic Reference Counting)是指内存管理中对引用采取自动计数的技术.以下摘自苹果官方说明: 在Objectiv ...

  9. swift 学习之自动引用计数

    swift 学习之自动引用计数 学习和研究的主要是"实例对象和实例对象直接的相会强引用所产生的内从泄漏"和"使用闭包产生的强引用造成的内存泄漏" 注意:只有以引 ...

随机推荐

  1. iOS10字体

    iOS10字体随着手机系统的字体改变,当我们手机系统字体改变以后,我们的app的lable也会跟着一起变化: 同样的6sp,在iOS9上面运行字体显示是没问题的,当我的手机更新了iOS10以后,有的界 ...

  2. mysql日志 解析

    mysql有4种不同的日志,分别是二进制日志,查询日志,慢查询日志和错误日志,这些日记记录着数据库工作的方方面面,可以帮助我们了解数据库的不同方面的踪迹,下面先介绍二进制日志的作用和使用方法,并利用二 ...

  3. Oracle直方图的详细解析

    yuanwen:http://blog.csdn.net/javacoffe/article/details/5578206 Oracle直方图解析 一.    何谓直方图: 直方图是一种统计学上的工 ...

  4. char、wchar_t、strlen、wcslen

    第一部分: strlen函数的宽字符版是wcslen(wide-character string length:宽字符串长度),并且在STRING.H(其中也说明了strlen)和WCHAR.H中均有 ...

  5. cassandra的源代码的入口

    参考 http://ju.outofmemory.cn/entry/115864 cassandra自带服务端,这和leveldb不一样. 入口就从服务端程序说起. 具体的入口程序在  Cassand ...

  6. MG--滚动的视觉差效果

    #几句代码完成tableView滚动的视觉差 - 效果图 (失帧严重)![](http://upload-images.jianshu.io/upload_images/1429890-f2c8577 ...

  7. python基础第四天(1)

    冒泡算法--算法 需求:请按照从小到大对列表 [13, 22, 6, 99, 11] 进行排序 思路:相邻两个值进行比较,将较大的值放在右侧,依次比较! 第一步 li = [13, 22, 6, 99 ...

  8. hdoj 1016 Prime Ring Problem

    Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ... ...

  9. 【温故Delphi】Win32API之GetTempFileName

    所遇问题 新建的算量工程文件暂时保存到临时文件中,代码中调用了Win32 API——GetTempFileName 但在一台笔记本上,函数返回了一个空字符串! 为了查明原因想到了好用的GetLastE ...

  10. javascript 日期转换为中文

    function CNDateString(date) { var cn = ["〇","一","二","三",&quo ...