IOS之 OC 和 C型別轉換

2021-06-18 18:30:57 字數 982 閱讀 4587

在oc和 c之間互相呼叫的時候,有時候必須用一些橋接關鍵字.  

__bridge只做型別轉換,但是不修改物件(記憶體)管理權;

__bridge_retained(也可以使用cfbridgingretain)將objective-c的物件轉換為core foundation的物件,同時將物件(記憶體)的管理權交給我們,後續需要使用cfrelease或者相關方法來釋放物件;

__bridge_transfer(也可以使用cfbridgingrelease)將core foundation的物件轉換為objective-c的物件,同時將物件(記憶體)的管理權交給arc。

__bridge

比如說乙個類例項想要轉換成void * 那就必須這樣定義,不然的話會報錯.

class *a;

void *b = (__bridge void *)a;

相反的class *c = (__bridge class *)b; 

生命週期僅在大括號的**內

__bridge

_retained

上邊**僅僅是指向乙個物件,如果物件不存在那麼它也指向null, 這個關鍵字是指向且擁有該物件就是.

生命週期如果是arc不用管,如果不是那麼必須手動release。 

class *a;

void *b = (__bridge void *)a;

a retain;

__bridge_transfer

這個關鍵字的相當於釋放原物件的擁有權,然後自己擁有。

class *a;

void *b = (__bridge void *)a;

a release;

b retain;

大概就是這樣 

OC 型別轉換

nsdata nsstring nsstring astring nsstring alloc initwithdata adataencoding nsutf8stringencoding nsstring nsdata nsstring astring 1234abcd nsdata adata...

iOS開發之OC和unity互動

1 unity呼叫oc oc類 testunity.h extern c testunity.m extern c unity的c 檔案 if unity ios 引入宣告 dllimport internal static extern void testunityfunction int ind...

iOS開發 OC資料型別

以下是oc中的例項,swift部分不適用 ios中的注釋 單行注釋 注釋對 起到解釋說明的作用,注釋是給程式設計師看的,不參與程式執行 多行注釋 xcode快捷鍵 全選 cmd a 複製 cmd c 貼上 cmd v 設定 cmd 注釋 cmd 執行 cmd r 編譯 cmd b 進製轉化 資料型別...