что такое (void *) параметр - PullRequest
3 голосов
/ 06 ноября 2010

Я недавно видел метод делегата (который, кажется, работает) и выглядит так:

- (void) doSomethingWithThisPieceOfData: (void *) theData;

Затем метод делегата преобразует данные в:

- (void) doSomethingWithThisPieceOfData: (void *) theData { anObject * myObject; myObject = (anObject) theData; .... }

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

спасибо.

Ответы [ 2 ]

4 голосов
/ 06 ноября 2010

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

0 голосов
/ 06 ноября 2010

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

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

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

Этот предыдущий ответ SO также может вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...