黑马程序员 ARC基本使用
来源:互联网 发布:public static json 编辑:程序博客网 时间:2024/05/17 19:16
——- android培训、java培训、ios培训期待与您交流!
什么是ARC
ARC英文名称:Automatic Reference CountingARC是一种编译器特性,编译器会在编译代码的时候自动检测哪里需要插入释放内存的代码,自动生成代码。
ARC的判断准则:
只要没有强指针指向对象,就会释放对象强指针:默认情况下,所有的指针都是强指针 __strong若指针:__weak
不使用ARC创建两个类方式:
//创建一个Car类@interface Car:NSObject@property(nonatomic,assign) int speed;@end@implementation Car@end//创建一个Person类,拥有一个Car@interface Person:NSObject@property(nonatomic,retain)Car *car;@end@implementation Person//重写dealloc方法-(void)dealloc{ [_car dealloc]; [super dealloc];}@endint main(){ //方法1使用@autoreleasepool @autoreleasepool { Car *c=[[[Car alloc] init] autorelease]; Person *p=[[[Person alloc] init] autorelease]; p.car=c; } //方法2 Car *c=[[Car alloc] init]; Person *p=[[Person alloc] init]; p.car=c; [p release]; [c release];}
使用ARC之后,
1.不允许调用release,retain,retainCount
2.允许重写dealloc,但不允许调用[super dealloc]
3.@property中的参数:
strong:相当于原来的retain,适用与OC对象类型
weak:相当于原来的assign,适用与OC对象类型
assign:适用于非OC对象类型
使用ARC只需要稍加修改代码:
//创建一个Car类@interface Car:NSObject@property(nonatomic,assign) int speed;@end@implementation Car@end//创建一个Person类,拥有一个Car@interface Person:NSObject@property(nonatomic,strong)Car *car;@end@implementation Person//重写dealloc方法@endint main(){ //正常书写代码 Car *c=[[Car alloc] init]; Person *p=[[Person alloc] init]; p.car=c;}
循环引用
ARC也有缺点,当两个类循环调用的时候如果这样声明
@interface Car:NSObject@property(nonatomic,strong)Person *person;@end@interface Person:NSObject@property(nonatomic,strong)Car *car;@end
那么最后Person和Car对象依然不会彻底释放,它们的计数器值不为0,因此解决方案:
一端用strong,另一端用weak
@interface Car:NSObject@property(nonatomic,weak)Person *person;@end@interface Person:NSObject@property(nonatomic,strong)Car *car;@end
循环引用的解决方案:
1.ARC
一端用strong,另一端用weak
2.非ARC
一端用retain,另一端用assign
总结
1.为什么使用ARC
ARC机制是编译器的一种特性,使用了ARC之后,程序员就不需要关心内存的管理,将心思专注于主要的功能实现上面。减轻了程序员的负担。
2.ARC的注意
1.程序员不需要关心内存的管理 2.程序员不能使用retain、release、retainCount 3.可以重写dealloc方法,不允许调用[super dealloc] 4.虚幻引用对象时,一端使用strong,一端使用weak
不是所有的程序都会使用ARC机制,在非ARC得程序中一定要控制好对象的内存空间,杜绝浪费…
0 0
- 黑马程序员 ARC基本使用
- 黑马程序员--在ARC项目中使用非ARC类
- 黑马程序员(ARC)
- ios黑马程序员--ARC
- 黑马程序员---ARC
- 黑马程序员-------ARC机制
- 黑马程序员_Web基本使用
- 黑马程序员 - OC语言 - 【考点】ARC使用特点及注意事项
- 黑马程序员——ARC
- ARC的基本使用
- 黑马程序员_JavaScript函数的基本使用
- "黑马程序员" Eclipse的基本使用
- 7、黑马程序员- NSString的基本使用
- 黑马程序员-JAVA.Collections-基本集合使用
- 黑马程序员--protocol的基本使用
- 黑马程序员---09非ARC程序转为ARC程序
- 黑马程序员-IOS-OC基础-ARC
- 黑马程序员-ARC,Block与protocol
- 经历的一些面试题
- png 批量 转 pvr.ccz
- 消息队列莫名其妙的错误 mq_open失败,Invalid argument
- linux基本操作命令
- Unix网络编程(卷二)源码编译报错解决
- 黑马程序员 ARC基本使用
- monkey
- POJ 2375 Cow Ski Area (强连通分量)
- Linux /etc/issue 和 /etc/issue.net的作用和区别
- 蛇形填数
- ios 长链接与短链接之间的转换
- c++新技能不断get中
- Maven理解与使用
- linux设备树dts移植详解 .