OC学习笔记09--OC中内存管理的ARC机制

#import <Foundation/Foundation.h>
@class ClassB;


//ClassA
@interface ClassA :NSObjcet

//ARC机制下,retain参数不可用,改成strong
@property (nonatomic,strong) ClassB b;
//非OC对象仍然使用assign
@property (nonatomic,assign) int count;

@end

@implementation ClassA

- (void)dealloc
{
	NSLog(@"%@ deallocated",[self className]);
	//dealloc中无法调用[super dealloc]
}
@end


//ClassB
@interface ClassB :NSObject
// 一方使用弱引用解决循环retain的问题
@property (nonatomic,weak) ClassA a;
@end

@implementation ClassB
- (void)dealloc
{
	NSLog(@"%@ deallocated",[self className]);
	
}
@end

int main()
{
	//ARC机制下无法使用任何内存管理相关方法与对象
	
	ClassA *a=[[ClassA alloc] init];
	ClassB *b=[[ClassB alloc] init];
	[a setB:b];[b setA:a];
	
	return 0;
}





OC中ARC机制:
ARC为编译器特性,不同于java中GC为运行时特性;
ARC回收对象的原则:
无强指针指向对象,则release;
强指针:__strong TYPE *p 为强指针,默认声明的所有指针都是强指针
弱指针:__weak Type *p 为弱指针,弱指针在指向的对象被销毁后会自动置零


使用ARC与不用代码上的区别:
1>ARC机制下,代码中无法使用任何内存管理相关的方法(retain,release,autorelease 等)
及对象(NSAutoreleasePooll 等),但是并非程序不使用内存管理功能,而是
内存管理代码由compiler在compile期间自动添加,无需开发人员参与内存管理;
2>ARC机制下,对象的setter无法使用retain,即@property中无法使用retain参数,
改用strong与weak表示强引用或是弱引用(适用OC对象,其他数据类型仍然使用assign)
例:@property (nonatomic,strong) NSObject * obj;
ARC机制下循环retain问题解决方式:一方使用strong,另一方使用weak
3>ARC机制下,重写的dealloc方法中无法再调用[super dealloc];

项目中部分文件使用ARC,部分不使用情况,可以给项目文件设置如下参数,告诉编译器是否使用ARC机制进编译:
-fno-objc-arc 不使用ARC编译
-f-objc-arc  使用ARC编译

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值