oc——类——MRC ARC

RC

reference counting,引用计数,instance object内存管理机制,表示instance object被多少个指针引用或拥有
RC = 0时,instance object自动调用dealloc,instance object销毁,因此勿手动调用dealloc,否则会导致多次调用dealloc(多次销毁instance object)

MRC

mannul reference counting,手动引用计数,一种RC管理机制,开发者手动管理RC,MRC机制易导致RC混乱,引发内存错误
常见内存错误:
  • 没有销毁instance object(内存泄露)
  • 提早销毁instance object(访问非法内存)
  • 重复销毁instance object(访问非法内存)
RC相关方法:
- (instancetype)retain OBJC_ARC_UNAVAILABLE;
- (oneway void)release OBJC_ARC_UNAVAILABLE;
- (instancetype)autorelease OBJC_ARC_UNAVAILABLE;
- (NSUInteger)retainCount OBJC_ARC_UNAVAILABLE;
注1:protocol NSObject接口,NSObject class实现,MRC下才能调用,ARC下禁止调用
注2:MRC编译选项:-fno-objc-arc
@interface FBAnimal : NSObject

@end

@implementation FBAnimal

- (void)dealloc
{
    NSLog(@"dealloc FBAnimal");
    [super dealloc];
}

@end

@interface FBDog : FBAnimal

@end

@implementation FBDog

- (void)dealloc
{
    NSLog(@"dealloc FBDog");
    [super dealloc];
}

@end
- (void)use_mrc
{
    FBDog *dog = [[FBDog alloc] init];
    NSLog(@"RC = %lu", dog.retainCount);
    [dog retain];
    NSLog(@"RC = %lu", dog.retainCount);
    [dog release];
    NSLog(@"RC = %lu", dog.retainCount);
    [dog retain];
    NSLog(@"RC = %lu", dog.retainCount);
    [dog release];
    NSLog(@"RC = %lu", dog.retainCount);
    [dog release];
    NSLog(@"method end");
}
output:
RC = 1
RC = 2
RC = 1
RC = 2
RC = 1
dealloc FBDog
dealloc FBAnimal
method end
注:dealloc调用后,对象已释放,此时获取的RC值无意义

ARC

automatic reference counting,自动引用计数,一种RC管理机制,编译器替开发者插入RC相关方法调用,ARC下禁止调用RC相关方法,否则会导致RC混乱,引发内存错误
ARC下禁止调用RC相关方法并不表示ARC放弃instance object的RC内存管理机制,实际上还是RC机制(要不就不使用ARC这个明显使用RC的名字了),ARC下编译器替开发者插入RC相关方法调用,目的是为了减轻开发者负担,减少内存出错状况,提高开发效率
注1:ARC为默认RC管理机制
注2:ARC编译选项:-fobjc-arc
@interface FBAnimal : NSObject

@end

@implementation FBAnimal

- (void)dealloc
{
    NSLog(@"dealloc FBAnimal");
    //[super dealloc];
}

@end

@interface FBDog : FBAnimal

@end

@implementation FBDog

- (void)dealloc
{
    NSLog(@"dealloc FBDog");
    //[super dealloc];
}

@end
- (void)use_arc
{
    FBDog *dog = [[FBDog alloc] init];
    //NSLog(@"RC = %lu", dog.retainCount);
    //[dog retain];
    //NSLog(@"RC = %lu", dog.retainCount);
    //[dog release];
    NSLog(@"method end");
}
output:
method end
dealloc FBDog
dealloc FBAnimal
注1:dog指向instance object,此时RC = 1,离开use_arc后,dog失效,RC减1,此时RC = 0,调用FBDog的dealloc
注2:ARC下,禁止调用RC相关方法,禁止调用dealloc,编译器会自动在dealloc方法末插入[super dealloc]调用父类dealloc,如果手动插入,就会导致[super dealloc]重复调用(重复销毁父类),导致内存错误
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值