麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

ARC下OC對象和CF對象之間的橋接(bridge)

2019-11-09 18:48:07
字體:
來源:轉載
供稿:網友

ARC下OC對象和CF對象之間的橋接(bridge)

在開發iOS應用程序時我們有時會用到Core Foundation對象簡稱CF,例如Core Graphics、Core Text,并且我們可能需要將CF對象和OC對象進行互相轉化,我們知道,ARC環境下編譯器不會自動管理CF對象的內存,所以當我們創建了一個CF對象以后就需要我們使用CFRelease將其手動釋放,那么CF和OC相互轉化的時候該如何管理內存呢?答案就是我們在需要時可以使用__bridge,__bridge_transfer,__bridge_retained,具體介紹和用法如下

1.__bridge:CF和OC對象轉化時只涉及對象類型不涉及對象所有權的轉化;

NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];CFURLRef ref = (CFURLRef)url;

上面的這段代碼在ARC環境下系統會給出錯誤提示和錯誤修正,修正后如下:

NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];CFURLRef ref = (__bridge CFURLRef)url;

系統為我們自動添加了__bridge,因為是OC創建的對象并且在轉換時沒有涉及對象所有權的轉換,所以上面的代碼不需要加CFRelease

2.__bridge_transfer:常用在講CF對象轉換成OC對象時,將CF對象的所有權交給OC對象,此時ARC就能自動管理該內存;(作用同CFBridgingRelease())

 

3.__bridge_retained:(與__bridge_transfer相反)常用在將OC對象轉換成CF對象時,將OC對象的所有權交給CF對象來管理;(作用同CFBridgingRetain())

NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];CFURLRef ref = (__bridge_retained CFURLRef)url;CFRelease(ref);
當使用_bridge_retained標識符以后,代表OC要將對象所有權交給CF對象自己來管理,所以我們要在ref使用完成以后用CFRelease將其手動釋放.復制代碼
CFStringRef cfString= CFURLCreateStringByAddingPercentEscapes(                                                                  NULL,                                                                  (__bridge CFStringRef)text,                                                                  NULL,                                                                  CFSTR("!*’();:@&=+$,/?%#[]"), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));NSString *ocString = (__bridge_transfer CFStringRef)cfString;復制代碼

此時OC即獲得了對象的所有權,ARC負責自動釋放該對象,如果我們在結尾加上CFRelease(cfString)純屬畫蛇添足,雖不會崩潰,但是控制臺會打印出該對象被free了兩次。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品一区二区久久久久久久网精 | 黄色免费小视频网站 | 午夜男人免费视频 | 成年片在线观看 | 亚洲欧美国产高清va在线播放 | 久久国产一级片 | 国产 视频 一区二区 | 日日做夜夜操 | 久久久经典视频 | 日韩视频在线一区二区三区 | 国产免费小视频在线观看 | 欧美日韩在线视频一区 | 韩国一级免费视频 | 免费一级特黄毛片 | 亚洲人成网站免费播放 | 日本成人一二三区 | 精品久久999| 欧美a∨一区二区三区久久黄 | xxxxxx视频| 久久伊人精品视频 | 亚洲国产视频网 | 国产成人精品无人区一区 | 欧美亚洲国产一区二区三区 | 亚洲人成在线播放网站 | 青草久久av| 在线看日本 | 久久久久久久久国产 | 日韩欧美电影一区二区三区 | 久久精品视频一区二区三区 | 小情侣嗯啊哦视频www | 欧美视频国产精品 | 成人一级免费视频 | 日本人乱人乱亲乱色视频观看 | 精国产品一区二区三区四季综 | 男男啪羞羞视频网站 | 黄色大片网站在线观看 | 精品国产精品久久 | 在线播放免费av | 欧美视频黄色 | 日本在线播放一区二区三区 | 亚洲第五色综合网 |