@autoreleasepool在ARC和MRC下的区别
来源:互联网 发布:js验证密码 编辑:程序博客网 时间:2024/06/07 02:53
MRC这个词应该是我编的,ARC,Automatic Reference Counting,手工引用计数就应该是:Manual Reference Counting,那就应该是MRC喽,不过没有见人这样用过。
ARC引入了新的语句管理自动释放池语法:
@autoreleasepool {
// Code, such as a loop that creates a large number of temporary objects.
}
测试了一下,在ARC情况下和MRC情况下对象的释放有不同。
比如,有这样的代码:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController{
NSString *myString;
}
@end
声明了一个myString成员变量。
然后编写下面的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
[self performSelector:@selector(test)];
NSLog(@”myString: %@”,myString);
}-(void)test{
@autoreleasepool {
NSString *string= [[NSString alloc] initWithFormat:@”First Name: %@”, @”tom”];
NSLog(@”string: %@”,string);
myString=string;
}
}
该项目在ARC情况下日志结果:
而在MRC情况下日志结果:
哦,这里说一下怎么切换Xcode项目从ARC到MRC,先选中项目根结点:
然后,在右侧:
因为条目很多,可以在搜索框中输入arc,这样就可以看到下面标识的条目了。
开始我以为@autoreleasepool等同于之前的NSAutoreleasePool类的api,只是起到语法糖的作用,节省了编写代码时间。上面的例子说明,只见还是有区别的。
为此,我查询了clang的文档,找到目前能说服我的解释。
这里简要介绍一下llvm和clang:
- llvm,low level virtual machine,是底层编译库
- clang,使用llvm底层库,编译器
可以参考这篇中文文章了解:LLVM与Clang介绍
下面解释一下在ARC和MRC中的不同处理:
- ARC,将释放所有在@autorelesepool块中的对象,这就是为什么本文示例使用了默认修饰符(strong),相当于做了retain,也一样被释放的原因
- MRC,在这种情况下@autorelesepool块等同于调用NSAutoreleasePool类的api
具体请参见:Clang的Automatic Reference Counting文档@autoreleasepool节
- @autoreleasepool在ARC和MRC下的区别
- @autoreleasepool在ARC和MRC下的区别
- @autoreleasepool在ARC和MRC下的区别
- MRC 和 ARC的区别
- block在ARC和MRC中的区别
- Object-C中的内存管理 MRC、ARC以及Autoreleasepool的区别
- Object-C中的内存管理 MRC、ARC以及Autoreleasepool的区别
- oc的MRC和ARC的区别
- block 的ARC和MRC中的区别
- block 的ARC和MRC中的区别
- block 的ARC和MRC中的区别
- MRC、ARC,MRC和ARC的混编
- ARC和MRC下的单例
- ARC 和 MRC 下的 delloc
- ARC-MRC下的单例宏
- ARC与MRC下setter方法的区别
- iOS 在ARC模式下使用MRC的类
- iOS 在ARC模式下使用MRC的工程
- PHP和AJAX上传文件
- 企业负载均衡技术资料打包下载
- HDOJ_1874畅通工程续 && hdoj_2544最短路
- Project2 简单订餐系统
- Delphix安装
- @autoreleasepool在ARC和MRC下的区别
- 巧妙算法收集
- 2013西安交大ACM校内赛C题
- weblogic安装、配置、优化、集群教程大全
- 类的继承
- 1. linux 目录结构
- 基于51单片机的电子钟设计[本科自动化毕业设计论文,源码,实物]
- 林仕鼎谈架构设计与架构师
- C++中控制浮点数精度函数setprecision使用方法