我最近看到一個委託方法(即似乎工作),看起來像這樣:什麼是(void *的)參數
- (空)doSomethingWithThisPieceOfData:(無效*)海圖;
委託方法然後投射海圖爲:
- (無效)doSomethingWithThisPieceOfData:(無效*)海圖 { anObject * myObject的; myObject =(anObject)theData; .... }
爲什麼這個工作,它是好的編碼習慣?我會用(id *)theData代替。
謝謝。
我最近看到一個委託方法(即似乎工作),看起來像這樣:什麼是(void *的)參數
- (空)doSomethingWithThisPieceOfData:(無效*)海圖;
委託方法然後投射海圖爲:
- (無效)doSomethingWithThisPieceOfData:(無效*)海圖 { anObject * myObject的; myObject =(anObject)theData; .... }
爲什麼這個工作,它是好的編碼習慣?我會用(id *)theData代替。
謝謝。
void *作爲類型表示可以傳遞任何指針,並且接收它的代碼將其轉換爲它認爲合適的任何類型。
它只是表示指針引用的對象的大小未聲明。指針將指向內存分配的開始,並由接收器以適當的方式來施放或讀取內存。
如果指定類型,指針仍然指向內存分配的開始位置,但是如果您增加其位置,它將跳過該特定類型所需的所有內存並指向下一個內存塊。
使用void指針,這不會發生。如果你增加位置,你可以最終進入內存而不是下一個對象。這樣可以更好地控制內存。
這個previous SO answer也可以幫助你。
謝謝大家。這現在是有道理的。我的下一個障礙是讓我的managedObject管理權利! – jangelo42 2010-11-07 17:24:57
你確定你確實需要'id *'作爲你的類型嗎? – 2010-11-05 22:00:56
'id *'會翻譯成類似'NSObject **'的東西,我猜不是你想要的。 – tidwall 2010-11-05 23:27:40