bridge 等方法的使用

2021-07-05 19:34:07 字數 1467 閱讀 4638

在開發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:@"

"];cfurlref

ref = (cfurlref)url;

上面的這段**在arc環境下系統會給出錯誤提示和錯誤修正,修正後如下:

nsurl *url = [[nsurl alloc] initwithstring:@"

"];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:@"

"];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;

bridge模式的使用

1.安裝uml utilities和bridge utils 2.將當前使用者加入到uml net組,目的是讓虛擬機器獲得操作網絡卡的許可權,配置完成後最好重啟一下。sudo gpasswd a username uml net 3.新增虛擬網路裝置,在 etc network inte ces後面...

ifndef def endif等巨集使用方法

從 一般情況下,源程式中所有的行都參加編譯。但是有時希望對其中一部分內容只在滿足一定條件才進行編譯,也就是對一部分內容指定編譯的條件,這就是 條件編 譯 有時,希望當滿足某條件時對一組語句進行編譯,而當條件不滿足時則編譯另一組語句。條件編譯命令最常見的形式為 ifdef 識別符號 程式段1 else...

Docker自定義bridge網絡卡的使用

1.建立bridge網絡卡 docker network create d bridge my bridge docker network ls 檢視網絡卡 network id name driver scope 05feb2c84b41 bridge bridge local bb8d74913...