A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 微雨独行 高级黑马   /  2014-10-7 09:31  /  3756 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 微雨独行 于 2014-10-7 09:35 编辑

拿出来供大家复习,欢迎指点:handshake
1、基本简介
(1)ARC,是 Automatic Reference Counting (自动引用计数器)的简称。
(2)ARC 是自iOS 5.0 之后增加的新特性,完全消除了手动管理内存的繁琐,编译器会自动在适当的地方插入适当的 retain、release、autorelease 语句。我们不再需要担心内存管理,因为编译器可以为我们处理一切。
(3)ARC 是编译器特性,不是iOS运行时特性,它也不是类似其它语言中的垃圾收集器。因此 ARC 和手动管理内存性能是一样,有时还能更快加速,因为编译器还可以执行某些优化。
2、ARC 基本原理
(1)规则
  ARC 的规则非常简单:只要还有一个强指针变量指向对象,对象就会保存在内存中。
(2)强指针 和 弱指针
  1> 默认所有指针都是强指针。
  2> 弱指针指向的对象被回收后,弱指针会自动变为空指针(nil指针)不会引发野指针错误
3、ARC的基本使用
  首先,看看在 Xcode6.0.1 如何设置ARC的开关:
  第一步:点击
  
  第二步:在搜索中输入ARC
  
   第三步:在Apple LLVM6.0 - Language - Objectie - C处可以看到 ARC 设置选项
  
(1)在ARC模式下,release 、retain 、retainCount 、autorelease 都是不能调用的。
  1> release不能被调用:
    2> retain 不能被调用
  3> retainCount  和 autorelease 也会出现和上面相同的错误,就不发图了。
(2) 为了验证ARC 是不是帮我们解决了内存管理问题,我们重写一下dealloc方法:不能使用 [super dealloc];
我们再次重写dealloc方法
点击,运行程序,可以得到
3、ARC 的原理
  通过(2)可知,ARC会帮助我们自动执行一些操作,我们没有告诉编译器要release,那么编译器怎么知道要使用release呢?
ARC的判断准则:只要没有强指针指向对象,就会释放对象。
指针分两种:
  1> 强指针:默认情况下,所有指针都是强指针  __strong(注:strong前是两个下划线)。
  2> 弱指针:__weak   弱指针指向的对象被回收后,弱指针会自动变为nil指针,不会引发野指针错误。
       弱指针并不能决定对象会不会被释放,一切遵循ARC判断原则:只要没有强指针指向对象,就会释放对象。
第1例:
第2例:
第3例:
第4例:
第5例:弱指针 __weak
第6例:
正常情况下:
使用__weak的情况:


评分

参与人数 1技术分 +2 黑马币 +10 收起 理由
★彬★卍囧神 + 2 + 10 总结的很好啊

查看全部评分

11 个回复

倒序浏览
神贴啊!!!
回复 使用道具 举报

低调 ,可以用来复习 我是一步一贴图
回复 使用道具 举报
微雨独行 发表于 2014-10-7 09:35
低调 ,可以用来复习 我是一步一贴图

大神太强大了。
回复 使用道具 举报

mark 吧  :lol
回复 使用道具 举报
不明觉厉啊,加油
回复 使用道具 举报
ifo 发表于 2014-10-7 09:46
不明觉厉啊,加油

不明觉厉,室友的解释是:不明白但是感觉很厉害。。。开玩笑了,一起加油!:lol
回复 使用道具 举报
ifo 中级黑马 2014-10-7 09:50:51
8#
微雨独行 发表于 2014-10-7 09:48
不明觉厉,室友的解释是:不明白但是感觉很厉害。。。开玩笑了,一起加油! ...

呵呵,人艰不拆,大侠,你已经在黑马了吗??
回复 使用道具 举报
ifo 发表于 2014-10-7 09:50
呵呵,人艰不拆,大侠,你已经在黑马了吗??

没有呢  备考ing:Q
回复 使用道具 举报
讲得很好,,,,,,
回复 使用道具 举报
好牛逼 啊 ,背景换绿色 感觉挺清爽的。
回复 使用道具 举报
米匠 中级黑马 2014-10-15 19:32:51
12#
顶起。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马