Objective-C

Foundation与CoreFoundation

2019-04-04  本文已影响1人  码小菜

目录
一,基本概念
二,内存管理
三,互相转换
四,宏定义

一,基本概念

1,Foundation:OC类库,NS开头

NSString,NSArray,NSDictionary...

2,CoreFoundation:C类库,CF开头

CFString,CFArray,CFDictionary...
二,内存管理

1,Foundation:OC对象,MRC环境下由程序员手动管理,ARC环境下由系统自动管理
2,CoreFoundation:非对象,MRC和ARC环境下都由程序员手动管理,只要是使用名称包含create/new/copy/retain的函数创建出来的,最后都需要手动调用release进行释放

三,互相转换
// OC -> C
NSString *ocStr1 = [NSString stringWithFormat:@"123"];
CFStringRef cStr1 = (CFStringRef)ocStr1;
[ocStr1 release];
CFRelease(cStr1);

// C -> OC
CFStringRef cStr2 = CFStringCreateWithCString(CFAllocatorGetDefault(), "123", kCFStringEncodingASCII);
NSString *ocStr2 = (NSString *)cStr2;
CFRelease(cStr2);
[ocStr2 release];

1,对象内存管理权不转移:__bridge

// OC -> C:仍然是自动管理
NSString *ocStr1 = [NSString stringWithFormat:@"123"];
CFStringRef cStr1 = (__bridge CFStringRef)ocStr1;

// C -> OC:仍然是手动管理
CFStringRef cStr2 = CFStringCreateWithCString(CFAllocatorGetDefault(), "123", kCFStringEncodingASCII);
NSString *ocStr2 = (__bridge NSString *)cStr2;
CFRelease(cStr2);

2,对象内存管理权转移:__bridge_retained__bridge_transfer

// OC -> C:转为手动管理
NSString *ocStr1 = [NSString stringWithFormat:@"123"];
CFStringRef cStr1 = (__bridge_retained CFStringRef)ocStr1;
CFRelease(cStr1);

// C -> OC:转为自动管理
CFStringRef cStr2 = CFStringCreateWithCString(CFAllocatorGetDefault(), "123", kCFStringEncodingASCII);
NSString *ocStr2 = (__bridge_transfer NSString *)cStr2;
四,宏定义

1,CFBridgingRetain

// 等价
CFStringRef cStr = (__bridge_retained CFStringRef)ocStr;
CFStringRef cStr = CFBridgingRetain(ocStr);

2,CFBridgingRelease

// 等价
NSString *ocStr = (__bridge_transfer NSString *)cStr;
NSString *ocStr = CFBridgingRelease(cStr);
上一篇 下一篇

猜你喜欢

热点阅读