标签:分享 官方文档 16px __bridge ons 笔记 get 4.0 live
__bridge
相关。结论
分析
Working with Blocks
。__attribute__((NSObject))
标志的指针。__bridge
相关。(参考文档Clang 4.0 documentation)__bridge
__bridge
的描述是这样的,可以实现非可保留对象指针以及可保留对象指针之间的转换,转换的两个对象必须一个是可保留对象,另外一个是非可保留对象,不做对象所有权转移,为了方便理解,可保留对象可以认为是一般情况下的OC对象(包括block等),非可保留对象可以认为是Core Foundation里面的对象等。__bridge_retain
__bridge_retained
的描述是这样的,__bridge_retained
把可保留对象指针类型转换为非可保留对象指针类型(不可以倒过来),转换前后对象所有权转移(从被转换者转移到转换者)。(void)bridgeRetain{ CFStringRef fontName = (__bridge CFStringRef)@"PingFangSC-Thin"; CGFloat fontSize = 13; CTFontRef fontRef = CTFontCreateWithName(fontName, fontSize, NULL); { id obj = [[NSObject alloc] init]; fontRef = (__bridge CTFontRef)obj; } CFRelease(fontRef); }
__bridge
的情况bridge_retain
之后可以运行通过,对象所有权转移到fontRef,所以必须要调用CFRelease函数来管理内存,不然会发生内存泄露。?
__bridge_transform
__bridge_transform
:把非可保留对象指针类型转换为可保留对象指针类型,对象所有权转移,ARC下,自动调用realeas操作。//示例函数 (void)bridgeTransform{ CFStringRef fontName = (__bridge CFStringRef)@"PingFangSC-Thin"; CGFloat fontSize = 13; CTFontRef fontRef = CTFontCreateWithName(fontName, fontSize, NULL); UIFont font = (__bridge_transfer UIFont)fontRef; }
使用__bridge
会出现内存泄露,fontRef的对象所有权没有转移,内存还是要手动释放。
?
目前的项目中的使用很多关于__bridge的用法
//这样
animationView.contents = (__bridge id)MQZ_LOAD_QZONE_IMAGE_NO_CACHE("mqz_live_bg.jpg").CGImage;
?
标签:分享 官方文档 16px __bridge ons 笔记 get 4.0 live
原文地址:http://www.cnblogs.com/superYou/p/6115518.html