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(idx) 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的情況,於是補充以下兩種...