OC中的自动引用计数
目录:
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中的自动引用计数的更多相关文章
- OC - ARC(自动引用计数)
1.什么是自动引用计数? 顾明思义,自动引用计数(ARC,Automatic Reference Counting)是指内存管理中对引用采取自动计数的技术. 在OC中采用ARC机制,让编译器来进行内存 ...
- Swift基础语法-内存管理, 自动引用计数
1. 工作机制 Swift和OC一样,采用自动引用计数来管理内存 当有一个强引用指向某一个对象时,该对象的引用计数会自动+1 当该强引用消失时,引用计数会自动-1 当引用计数为0时,该对象会被销毁 2 ...
- OC基础15:内存管理和自动引用计数
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Swift2.1 语法指南——自动引用计数
原档: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programm ...
- swift学习笔记之-自动引用计数
//自动引用计数 import UIKit /*自动引用计数(Automatic Reference Counting) 防止循环强引用 Swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用 ...
- swift:自动引用计数ARC
Swift自动引用计数:ARC 原文链接:https://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/chapte ...
- 自动引用计数(ARC)
1.1什么是自动引用技术 顾名思义,自动引用计数(ARC, Automatic Reference Counting)是指内存管理中对引用采取自动计数的技术.以下摘自苹果官方说明: 在Objectiv ...
- swift 学习之自动引用计数
swift 学习之自动引用计数 学习和研究的主要是"实例对象和实例对象直接的相会强引用所产生的内从泄漏"和"使用闭包产生的强引用造成的内存泄漏" 注意:只有以引 ...
随机推荐
- 【转】java项目转web项目
将项目文件.project文件的<natures>...</natures>代码段中加入 <nature>org.eclipse.wst.common.pro ...
- iOS.ReactNative-3-about-viewmanager-uimanager-and-bridgemodule
RCTViewManager and RCTUIManager 1. RCTViewManager 1.1 RCTViewManager 实现了接口RCTBridgeModule @interface ...
- 一次诡异的TOMCAT启动故障的解决
该系统采用TOMCAT+SSH+Linux+Proxool连接池, 以前数据库是本地连接. 后换数据库远端连接,最近老是启动不了. 1.怀疑是proxool连接池没有自动断开后恢复.尝试解决,不是这个 ...
- margin:0 auto 与 text-align:center 的区别
基本概念: 1.text-align: 属性规定元素中的文本的水平对齐方式; 该属性通过指定行框与哪个点对齐,从而设置块级元素内文本的水平对齐方式; 一般情况下设置文本对齐方式的时使用此属性.支 ...
- CVTE实习面经
一个月的实习都结束了,我才把这篇面经放出来...可能有记得不太清楚的地方,还请多多见谅. 第一次面试是在5月中旬. 这次面试问的主要是基础的问题吧,就是C和C++的基础问题,我记得有问到下面几个问题 ...
- hdoj 1016 Prime Ring Problem
Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ... ...
- Android Service完全解析,关于服务你所需知道的一切(上)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...
- linux下安装oracle
一>1.关闭防火墙,禁用selinux vi /etc/selinux/config 修改SELINUX=disabled,然后重启,如果不想重启使用命令setenforce 0 2.安装依赖 ...
- Linux最常用命令之cd和ls
为什么说是最常用的命令呢,因为从普及程度看,即使不怎么接触过Linux系统的人,大多数都会知道这两个命令:而从使用频率看,这两个命令也是当之无愧的首位.现在我们就来看看这两个命令. cd 篇:cd 即 ...
- 从程序员到CTO的Java技术路线图 作者:zz563143188
在技术方面无论我们怎么学习,总感觉需要提升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样我们清楚的知道我们大概处于那个阶段和水平. Java程序员 高级特性 反射.泛型. ...