2010-11-05 121 views
3

我最近看到一個委託方法(即似乎工作),看起來像這樣:什麼是(void *的)參數

- (空)doSomethingWithThisPieceOfData:(無效*)海圖;

委託方法然後投射海圖爲:

- (無效)doSomethingWithThisPieceOfData:(無效*)海圖 { anObject * myObject的; myObject =(anObject)theData; .... }

爲什麼這個工作,它是好的編碼習慣?我會用(id *)theData代替。

謝謝。

+0

你確定你確實需要'id *'作爲你的類型嗎? – 2010-11-05 22:00:56

+0

'id *'會翻譯成類似'NSObject **'的東西,我猜不是你想要的。 – tidwall 2010-11-05 23:27:40

回答

4

void *作爲類型表示可以傳遞任何指針,並且接收它的代碼將其轉換爲它認爲合適的任何類型。

0

它只是表示指針引用的對象的大小未聲明。指針將指向內存分配的開始,並由接收器以適當的方式來施放或讀取內存。

如果指定類型,指針仍然指向內存分配的開始位置,但是如果您增加其位置,它將跳過該特定類型所需的所有內存並指向下一個內存塊。

使用void指針,這不會發生。如果你增加位置,你可以最終進入內存而不是下一個對象。這樣可以更好地控制內存。

這個previous SO answer也可以幫助你。

+0

謝謝大家。這現在是有道理的。我的下一個障礙是讓我的managedObject管理權利! – jangelo42 2010-11-07 17:24:57

相關問題