ARC下OC物件和CF物件之間的橋接(bridge)
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了兩次。
相關文章
- 2.2 橋接 Bridge橋接
- 設計模式 | 橋接模式(bridge)設計模式橋接
- jQuery物件和DOM物件和字串之間的轉化jQuery物件字串
- iOS-OC、Swift混編之橋接檔案iOSSwift橋接
- OC底層原理之例項、類物件、元類物件物件
- 《設計模式》 - 6. 橋接模式( Bridge )設計模式橋接
- OC物件的本質物件
- Strimzi Kafka Bridge(橋接)實戰之一:簡介和部署Kafka橋接
- C#設計模式-橋接模式(Bridge Pattern)C#設計模式橋接
- oc與swift檔案的相互呼叫方式——橋接Swift橋接
- 設計模式系列之代理模式(Proxy Pattern)——物件的間接訪問設計模式物件
- Strimzi Kafka Bridge(橋接)實戰之二:生產和傳送訊息Kafka橋接
- java基本型別和物件之間的轉換Java型別物件
- OC原始碼剖析物件的本質原始碼物件
- 關聯物件的實現原理【OC】物件
- Strimzi Kafka Bridge(橋接)實戰之三:自制sdk(golang版本)Kafka橋接Golang
- fastjson: json物件,json物件陣列,javabean物件,json字串之間的相互轉化ASTJSON物件陣列JavaBean字串
- OC物件記憶體佈局物件記憶體
- OC物件是結構體的驗證物件結構體
- JSON 與 Java 物件之間的轉化JSONJava物件
- Java橋模式(Bridge模式)Java模式
- JavaScript之物件和原型JavaScript物件原型
- 設計模式之橋接設計模式橋接
- session物件、cookie物件和appliaction物件Session物件CookieAPP
- OC記憶體管理--物件的生成與銷燬記憶體物件
- MJiOS底層筆記--OC物件本質iOS筆記物件
- MJiOS底層筆記–OC物件本質iOS筆記物件
- 設計模式 - Bridge 橋模式設計模式
- 物件導向 -- 類的載入順序 類和物件的名稱空間物件
- 設計模式之【橋接模式】設計模式橋接
- 設計模式之橋接模式設計模式橋接
- JavaScript課程——Day07(物件簡介、Math物件、時間物件、字串物件)JavaScript物件字串
- 淺談OC物件初始化的三種姿勢物件
- iOS底層原理總結--OC物件的本質(一)iOS物件
- iOS底層原理總結--OC物件的本質(二)iOS物件
- c++中string類物件和字元陣列之間的相互轉換C++物件字元陣列
- SS241030C. 橋樑(bridge)
- 橋接橋接