A.ARC的基本原理

1.ARC的判断原则:只有没有强指针指向对象,就会立即释放对象
注意,在以下情况,会立即回收内存:
(1)指针超出作用域
     {
Person *p1 = [[Personalloc] init];
p1.name = @"p1";
NSLog(@"");
}// 超出p1作用域,回收p1指向的空间 NSLog(@"");
out:
2014-11-21 00:14:59.980 01-autorelease基本概念[4282:263265] 1
2014-11-21 00:14:59.981 01-autorelease
基本概念[4282:263265] Person - p1被回收了
2014-11-21 00:14:59.981 01-autorelease
基本概念[4282:263265] 2
 
(2)指针指向别的对象
     Person *p1 = [[Personalloc] init];
NSLog(@"");
p1.name = @"p1";
NSLog(@"");
p1 = [[Personalloc] init]; // p1指向了别的对象,原来指向的内存空间被释放
NSLog(@"");
 
out:
2014-11-21 00:10:52.263 01-autorelease基本概念[4248:261439] 1
2014-11-21 00:10:52.264 01-autorelease
基本概念[4248:261439] 2
2014-11-21 00:10:52.264 01-autorelease
基本概念[4248:261439] Person - p1被回收了
2014-11-21 00:10:52.264 01-autorelease
基本概念[4248:261439] 3
2014-11-21 00:10:52.264 01-autorelease基本概念[4248:261439] Person - p2被回收了
 
(3)指针置nil
     Person *p1 = [[Personalloc] init];
p1.name = @"p1";
NSLog(@"");
p1 = nil; // p1被置为nil,原来指向的内存空间被释放
NSLog(@"");
 
out:
2014-11-21 00:12:49.289 01-autorelease基本概念[4266:262528] 1
2014-11-21 00:12:49.291 01-autorelease
基本概念[4266:262528] Person - p1被回收了
2014-11-21 00:12:49.291 01-autorelease
基本概念[4266:262528] 2
 
强弱指针:
(1)强指针:使用_strong修饰, 默认情况下,所有指针都是强指针
(2)弱指针:使用_weak修饰
 
 
2.启动了ARC之后,@property属性不能使用retain了,retain用strong代替(不会报错,效果weak等同assign, strong等同retain)
@property(nonatomic,strong)Dog*dog;
 
有strong和weak两种指针类型可以选择
 
3.ARC的特点
(1)不允许调用release、retain、retainCount
(2)允许重写dealloc,但是不允许调用[super dealloc],其实不重写其成员对象也会自动被释放
(3)@property参数
a.strong:成员变量是强指针,(适用于OC对象类型)
b.weak:成员变量是弱指针,(适用于OC对象类型)
c.assign:适用于非OC对象类型
 
—》以前的retain改为用strong
 
B.XCode的ARC转换
1.重构转换
Edit -> Refactor -> Convert to ARC for Objective c
自动消除掉函数、dealloc中的release代码
 
2.手动指定不需要使用ARC的代码文件
项目 -> Build Phase -> 双击代码文件 -> 加入参数 “-fno-objc-arc”
参数:
(1)-fno-objc-arc:禁用ARC
(2)-f-objc-arc:开启ARC
 
 
C.循环引用
互相使用strong引用的对象,不能被释放
解决:其中一方使用weak引用,一方使用strong引用
——————Person.h———————
 @classDog;
@interfacePerson :NSObject
@property(nonatomic,strong)Dog*dog;
@end
 
——————Dog.h————————
 @classPerson;
@interfaceDog :NSObject
@property(nonatomic,weak)Person*person;
@end
 
对比非ARC的解决方案:一方使用retain,另一方使用assign
 

[Objective-c 基础 - 3.2] ARC的更多相关文章

  1. Objective—C基础学习总结

        1. (1)面向过程:一种以事件为中心的编程思想         (2)面向对象:一种以对象为中心的编程思想        2.get和set是用来访问和修改对象里的属性值           ...

  2. Objective C 基础

    1,字符串加@: 不加@的是C语言字符串. 加@的代表的是OC的NSString http://www.jikexueyuan.com/course/71_2.html 2,setValuesForK ...

  3. [置顶] IOS 基础入门教程

    IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...

  4. Getting Started with Core Data

    Getting Started with Core Data Getting Started with Core Data Coreframework支持创建对象模型封装你的应用数据和逻辑满足MVC设 ...

  5. YYKit @autoreleasepool 使用,优化内存

    写在前面 最近再看YY大神的YYKit工具,发现在代码中经常使用@autoreleasepool,特别是在与for循环搭配使用的时候.刚开始很不能理解. 先有个概念: 自己创建的对象:使用 alloc ...

  6. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  7. Objective C中的ARC的修饰符的使用---- 学习笔记九

    #import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...

  8. Objective C ARC 使用及原理

    手把手教你ARC ,里面介绍了ARC的一些特性, 还有将非ARC工程转换成ARC工程的方法 ARC 苹果官方文档 下面用我自己的话介绍一下ARC,并将看文档过程中的疑问和答案写下来.下面有些是翻译,但 ...

  9. swift 学习(二)基础知识 (函数,闭包,ARC,柯里化,反射)

    函数 func x(a:Int, b:Int)  {}   func x(a:Int, b:Int) -> Void {}  func x(a:Int, b:Int) ->(Int,Int ...

随机推荐

  1. python脚本工具-2 去除扩展名后提取目录下所有文件名并保存

    文件夹里有多个RM格式的视频文件,现需要把它们的文件名都提取出来,并去掉文件的扩展名,以便放到需要的网页里. 源代码: # --- picknames.py --- import os filenam ...

  2. LCMS

    LCMS(LearningContent Management System) 即学习内容管理系统

  3. Linux的终端与进程

    原文链接:http://os.51cto.com/art/201104/256477.htm Linux的普通进程(守护进程除外) 是终端的子进程,进程的存在要依赖终端为其提供空间包括标准输入.标准输 ...

  4. ios 应用剖析

    在创建HelloWorld的过程中,生成了很多文件(展开Xcode左边的项目导航视图可以看到,如图2-8所示),它们各自的作用是什么?彼此间又是怎样的一种关系呢? 图2-8 项目导航视图 如图2-8所 ...

  5. 去除html标签 正则 <.+?> 解释

    http://baike.baidu.com/link?url=2zORJF9GOjU8AkmuHDLz9cyl9yiL68PdW3frayzLwWQhDvDEM51V_CcY_g1mZ7OPdcq8 ...

  6. android 电容屏(三):驱动调试之驱动程序分析篇

    平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博 ...

  7. python 中@property的使用

    从14年下半年开始接触到python,自学了一段时间,后又跟别人学习了下,把基础知识基本上学过了.忽然感觉python不可能这么简单吧,就这么点东西?后来看了下书,发现还有很多的高级部分.连续看了两天 ...

  8. HTML5学习(九)----应用程序缓存

    参考教程:http://www.w3school.com.cn/html5/html_5_app_cache.asp 使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 w ...

  9. 8.21 usaco

    summary:6 bzoj1692://后缀数组就行了O(nlogn)c[30]会RE...注意!!! #include<cstdio> #include<cstring> ...

  10. GRIB格式转换心得(转自博客:http://windforestwing.blog.163.com/blog/static/19545412007103084743804/)

    1.wgrib的使用 在cmd命令行下键入wgrib后即可察看wgrib相关命令参数,简要介绍如下: l        Inventory/diagnostic–output selections 详 ...