2010-11-05 2 views
3

Я недавно видел метод делегата (который, кажется, работает) и выглядит следующим образом:то, что есть (VOID *) Параметр

- (Недействительными) doSomethingWithThisPieceOfData: (недействительными *) theData;

Метод Делегат затем отбрасывает theData как:

- (недействительными) doSomethingWithThisPieceOfData: (недействительными *) theData { anObject * MyObject; myObject = (anObject) theData; ....

Почему это работает, и это хорошая практика кодирования? Вместо этого я использовал бы (id *) theData.

спасибо.

+0

Вы действительно хотите, чтобы 'id *' был вашим типом? –

+0

'id *' будет переводить на что-то вроде NSObject **, которое, как я предполагаю, не то, что вы хотите. – tidwall

ответ

4

void * как тип указывает, что любой указатель может быть передан, и что код, который его получает, будет отличать его от любого типа, который он считает уместным.

0

Это просто означает, что размер объекта, к которому относится указатель, не объявлен. Указатель укажет на начало выделения памяти, и приемник будет правильно отображать или читать память.

Если вы укажете тип, указатель по-прежнему указывает на начало выделения памяти, но если вы увеличите его положение, он перепрыгнет всю память, необходимую для этого конкретного типа, и укажет на следующий блок памяти.

С указателем на пустоту этого не происходит. Если вы увеличиваете позицию, вы можете оказаться внутри памяти для своего объекта, а не на следующем объекте. Таким образом вы можете получить намного лучший контроль над памятью.

Этот previous SO answer может вам помочь.

+0

спасибо всем. это имеет смысл сейчас. Следующее препятствие - это управление моим управляемым объектом. – jangelo42

Смежные вопросы