2010-10-13 5 views
3

Possible en double:
objective c difference between id and void *Quelle est la différence entre void * et id?

Par exemple, une méthode de rappel de délégué d'animation UIView a cet argument:

context:(void*)context 

Pourquoi ne pas simplement id? Je passe toujours à zéro si je ne me soucie pas d'un contexte. Mais quand j'en veux un, je passe l'objet. Quelle est la différence? Pourquoi ont-ils préféré annuler * sur ID?

+3

Bonne question, mais elle a déjà été posée. Les bonnes nouvelles sont qu'il a déjà été correctement corrigé: http://stackoverflow.com/questions/1304176/objective-c-difference-between-id-and-void/1304277#1304277 –

Répondre

7

id est un pointeur sur une structure qui a un pointeur isa (qui indique à l'exécution de ObjectiveC que cette "chose" est un objet). void* est simplement un pointeur vers éventuellement n'importe quoi (probablement un autre id).

2

C'est pour vous permettre de passer un pointeur sur ce que vous voulez. Peut être un objet obj-c, un pointeur vers un tableau, une struct, peu importe. Le type void * est juste le type le plus général, "tout est permis".

Si vous ne faites que passer, ne vous inquiétez pas. Vous pouvez passer NULL à la place si cela vous fait vous sentir mieux.

2

Je pense que vous demandez quelque chose de plus que la différence entre id et void *. Il semble que vous demandiez pourquoi est-il nul * dans ce cas.

Ceci est nul * parce que c'est votre pointeur. Personne d'autre que vous ne l'utilisera. Ce pointeur ne sera pas conservé ou utilisé autrement. Lorsque l'animation appelle votre méthode de rappel, elle vous renvoie ce pointeur intact. Ce que vous en faites dépend de ce que vous mettez dans le contexte: en premier lieu.

Etre un vide * vous permet de faire beaucoup de choses. Vous pouvez passer dans un objet standard-c. Vous pouvez passer une structure de données de style C simple. Vous pouvez passer dans un pointeur de fonction. Vous pourriez passer le néant et ne rien faire.

Questions connexes