OC对象与CF对象的相互转换 和 ARC下查看OC对象的引用计数
Posted SSIrreplaceable
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC对象与CF对象的相互转换 和 ARC下查看OC对象的引用计数相关的知识,希望对你有一定的参考价值。
注意:文中的OC对象指Objective-C对象,CF对象指Core Foundation中的对象
转换方法:
(__bridge type)expression
(__bridge_retained CF type)expression
(__bridge_transfer Objective-C type)expression
一. OC对象与CF对象的相互转换
1. OC对象转CF对象
- (void)OFConvertOC
CFStringRef stringCF = (CFStringRef)@"OF对象 --> OC对象";
NSString *stringOC1 = (__bridge NSString *)stringCF; // 方式一
NSString *stringOC2 = (__bridge_transfer NSString *)stringCF; // 方式二
NSLog(@"%@", stringOC1);
NSLog(@"%@", stringOC2);
2. OF对象转OC对象
- (void)OCConvertCF
NSString *stringOC = @"OC对象 --> CF对象";
CFStringRef stringCF1 = (__bridge CFStringRef)stringOC; // 方式一
CFStringRef stringCF2 = (__bridge_retained CFStringRef)stringOC; // 方式二,但stringCF2引用计数会加1
NSLog(@"%@", stringCF1);
NSLog(@"%@", stringCF2);
二. ARC下查看OC对象的引用计数
- (void)seeRetainCountFromARC
NSObject *objOC = [[NSObject alloc] init];
CFTypeRef objCF = (__bridge CFTypeRef)objOC;
// 最初的引用计数
// NSInteger retainCount = CFGetRetainCount(objCF);
// 这里可以不用以__bridge前缀转换,但是如果拆开就得加上__bridge
NSInteger retainCount = CFGetRetainCount((CFTypeRef)objOC);
NSLog(@"最初 --- 引用计数 --- %ld", retainCount);
// 引用计数加1
CFRetain(objCF);
NSLog(@"retain --- 引用计数 --- %ld", CFGetRetainCount(objCF));
// 引用计数减1
CFRelease(objCF);
NSLog(@"release --- 引用计数 --- %ld", CFGetRetainCount(objCF));
// 使用__bridge_retained为前缀转换,引用计数会加1
objCF = (__bridge_retained CFTypeRef)objOC;
NSLog(@"__bridge_retained --- 引用计数 --- %ld", CFGetRetainCount(objCF));
// 当把objOC设为nil,在ARC下引用计数为0,系统会自动销毁objOC对象
objOC = nil;
以上是关于OC对象与CF对象的相互转换 和 ARC下查看OC对象的引用计数的主要内容,如果未能解决你的问题,请参考以下文章