void 與id型別的相互轉換

2021-09-25 01:58:03 字數 1152 閱讀 7663

void *與id型別相互轉換

在mrc下,void *與id型別相互轉換完全沒問題。

id obj  =[[nsobject alloc] init];

void *p = (void *)p;

obj = (id)p;

但是在arc下,這種直接轉換編譯器會報錯,需要使用__bridge關鍵字:

id obj = [[nsobject alloc] init];  //

引用計數為1

void *p = (__bridge void *)obj; //

引用計數仍為1

id obj2 = (__bridge id)p ;//

引用計數為2,因為obj2是__strong

__bridge_retained與__bridge_transfer

與__bridge相關的還有另外兩個:__bridge_retained和__bridge_transfer。

id obj = [[nsobject alloc] init]; //

引用計數為1

void *p = (__bridge_retained void *)obj ;//

引用計數為2

//上述**等價在mrc為

id obj =[[nsobject alloc] init];

[obj retain];

void *p = (__bridge void)obj

id obj = (__bridge_transfer id)p  //

引用計數仍為1

//上述**等價在mrc為

id obj obj = (__bridge id

)p[obj

retain];

[(id)p release];

cfbridgingretain與cfbridgingtransfer

這兩個函式也只在arc下生效,等價於:

cftyperef cfbridgingretain(id

x) id

cfbridgingrelease(cftyperef x)

void 與id型別的相互轉換

void 與id型別相互轉換 在mrc下,void 與id型別相互轉換完全沒問題。id obj nsobject alloc init void p void p obj id p 但是在arc下,這種直接轉換編譯器會報錯,需要使用 bridge關鍵字 id obj nsobject alloc i...

數學型別與字元型別相互轉換

數學型別變數與字串相互轉換 這些函式都在stdlib.h裡 1 將數學型別轉換為字串可以用以下一些函式 舉例 crtimp char cdecl itoa int,char int 這是乙個將數字轉換為乙個字串型別的函式,最後乙個int表示轉換的進製 如以下程式 int ityep 3 char s...

Python list str型別相互轉換

1 str list s 12345 l list s 結果 1 2 3 4 5 2 list str l 1 2 3 s join l 結果 123 如果list裡的元素是int型而非str型則比較麻煩,還這樣寫會報錯,而在刷題時經常碰到需要將int型的list輸出為str的情況,於是補充以下兩種...