基本简介
  1. ARC是Automatic Reference Counting(自动引用计数器)的简称。
  2. ARC是ios5.0引入的新特性,完全消除手动管理内存的繁琐,编译器会自动在适合的代码里面插入适当的retain,release,autorelease的语句。我们不要再担心内存管理,因为编译器帮我们做了这一切。
  3. ARC是编译器的特性,并非运行时的特性,也不是其他编程语言中的垃圾回收器。因此自动管理和手动管理内存其实一样的,但是自动管理更加快速,因为编译器执行某些优化。
基本原理
  1. ARC的规则就是只要对象没有强指针引用,就会被释放掉,换而言之 只要还有一个强引用指针变量指向对象,那么这个对象就会存在内存中。弱指针指向的对象,会被自动变成空指针(nil指针),从而不会引发野指针错误。
基本使用
  1. ARC设置如下

    028B1D47-5AFC-4CD9-8996-663D6F5F4BBA.png
  2. ARC模式下 retain ,release,retainCount 是不能够调用的。
    例子1

    7F6ACD2D-DED5-497C-9ACF-912B1C3081F0.png

    例子2
    dealloc可以重写,但是不能用[super dealloc],编译器会报错。

0725DA76-0AF9-4C60-B330-1C1F8378F363.png

例子3

941E4E52-DC62-423E-A81B-93EB5FD0CB3F.png

DDD75C44-DCAA-4D68-83D3-4F8988BB4188.png

例子4

2C8CBF67-16E2-4119-A787-DCA77926608E.png

4D0E2D6F-F1E8-4CC1-8155-69D2EFF69646.png

例子5__weak弱指针

7BA16564-2CAE-427D-AE63-84B9544AEDA3.png
注意使用事项

1.循环引用
解决办法:一段用强引用,一段用弱引用。outlet的控件属性都是weak修饰,因为他们已经被父控件强引用。
2.ARC只对OC对象的进行内存管理,对于CoreFundation的api使用,他的对象所有权没有移交给OC对象管理,都需要手动去释放。

转载:http://www.jianshu.com/p/6ab1f1cd0bb1

ARC基本原理的更多相关文章

  1. iOS ARC基本原理

    一.ARC基本简介 ARC:Automatic Reference Counting 自动引用 完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autor ...

  2. objective-c 语法快速过(7)编译器特性ARC

    ARC(是编译器特性) ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内 ...

  3. OC语言(五)

    三十七.SEL类型-方法的包装 发送消息其实就是发送SEL. 每个方法都有与之对应的SEL类型数据. 第一次调用方法,先把方法包装成为SEL数据,再根据SEL去找方法地址,最后根据方法地址调用相应的方 ...

  4. OC-内存管理-基本原理与引用计数器

    基本原理 1. 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用 ...

  5. 对CLR基本原理概念&垃圾回收机制的简单理解

    前言,之前有说过C语言的函数&变量的一些基本概念,说得可能不是很好,先也把C#的.里相关的也说下,已成一统. 而说函数变量,其实主要就是GC,而GC又是CLR的主要内容,故就有了此文. CLR ...

  6. 内存管理、ARC

    内存管理 一.基本原理 1.什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一 ...

  7. [Objective-c 基础 - 3.2] ARC

    A.ARC的基本原理 1.ARC的判断原则:只有没有强指针指向对象,就会立即释放对象 注意,在以下情况,会立即回收内存: (1)指针超出作用域 { Person *p1 = [[Personalloc ...

  8. Python Garbage Collection 与 Objective-C ARC

    转载请注明出处 http://blog.csdn.net/u014205968/article/details/69389363 Python GC 与 Objective-C ARC 提起GC(Ga ...

  9. OC 内存管理之自动内存管理ARC

    一.基本简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因 ...

随机推荐

  1. 程序媛计划——mysql基本操作

    本文适用于mac 在官网上下载community 版mysql,选择dmy这种.在终端中安装好mysql. #进入mysql /usr/local/mysql/bin/mysql -uroot -p ...

  2. jzoj1407

    首先設在整個數組內可以直接到達n+1的最左邊的點點為x 則x+1-n區間都可以一次或2次到達n+1 如果某一個點i可以一次到達n+1,則其i+a[i]大於等於n+1 否則可以先跳到i再跳到n+1,需要 ...

  3. http 协议 c++代码 获取网页

    最近接触了些 html 和 JavaScript,索性了解下 http 协议.在园子里找到了 HTTP协议详解,图文并茂,很爽! 于是小小的尝试了下 #include <WinSock2.h&g ...

  4. Django安装(第一个项目)

    day60 从系统中选择已存在的解释器. 新建Django项目         命令行创建:             django-admin startproject mysite          ...

  5. Python(IO model)

    day34 IO model 举例:https://blog.csdn.net/ZWE7616175/article/details/80591587 参考:http://www.cnblogs.co ...

  6. Python面向对象(多态)

    day24 面向对象三大特性:多态 Python原生就是多态的.

  7. IdentityServer4登陆中心

    1. 使用Vsual Studio Code 终端执行 dotnet new webapi --name IdentityServerSample 命令创建一个webapi 的 IdentitySer ...

  8. 如何利用反射简化Servlet操作

    如何利用反射简化Servlet操作   一.反射的实现 新建类BaseServlet,继承HttpServlet(不需要在web.xml文件中配置) 1.在doPost()方法中处理请求乱码,并调用d ...

  9. js中call、apply、bind的使用

    写在前面的话 这三个方法都是来自Function.prototype上,所以所有的函数都可以使用. 他们有一个共同点,就是可以指定函数执行时的内部this指向. call和apply的区别在于参数的方 ...

  10. POJ 1183

    #include<iostream> #include<stdio.h> using namespace std; int main() { //freopen("a ...