ARC 类型转换:显示转换 id 和 void *

2017-08-04  本文已影响0人  VincentHK

/*

// __bridge 转换 //////////////////////
// ARC无效时 对应的代码
id obj = [[NSObject alloc] init];
void *p = obj;

id o = p;
[o release];

// 在 ARC 有效时 通过 __bridge转换 id 和 void * 就能够相互转换
id obj = [[NSObject alloc] init];
void *p = (__bridge void *)obj;
id o = (__bridge id)p;

void *p = (__bridge void )obj;
id o = (__bridge id)p;
/

/*

// ARC 无效时的代码
id obj = [[NSObject alloc] init];
void *p = obj;
[(id)p retain];

// __bridge_retained ARC 转换
void *p = 0;
{
id obj = [[NSObject alloc] init];
p = (__bridge_retained void )obj;
}
NSLog(@"class=%@", [(__bridge id)p class]);
/

// ARC 无效时的代码
void p = 0;
{
id obj = [[NSObject alloc] init]; /
[obj retainCount] -> 1 /
p = [obj retain]; /
[obj retainCount] -> 2 /
[obj release]; /
[obj retainCount] -> 1 */
}

/*

/*

// ARC 无效时的代码
id obj = (id)p;
[obj retain];
[(id)p release];
// __bridge_transfer 转换 /////////////

/*

// ARC 无效时的代码
id p = [[NSObject alloc] init];
NSLog(@"class=%@", [p class]);
[p release];
// ARC中并不推荐这种方法 /////////////

上一篇 下一篇

猜你喜欢

热点阅读