void *和id有什么区别?

时间:2010-10-13 19:51:26

标签: iphone objective-c ipad

  

可能重复:
  objective c difference between id and void *

例如,UIView动画委托回调方法具有以下参数:

context:(void*)context

为什么不简单地id?如果我不关心语境,我总是通过nil。但是当我想要一个时,我会传递这个对象。有什么不同?为什么他们更喜欢void * over id?

3 个答案:

答案 0 :(得分:7)

id是指向具有isa指针的结构的指针(指向ObjectiveC运行时,此“事物”是对象)。 void*只是指向任何可能的指针(可能是另一个id)。

答案 1 :(得分:2)

允许您将指针传递给您喜欢的任何内容。可以是一个obj-c对象,一个指向某个数组的指针,一个结构,等等。 void *类型只是最常见的“任何事情”类型。

如果您只是传递零,请不要担心。如果它让你感觉更好,你可以传递NULL。

答案 2 :(得分:2)

我认为你问的不仅仅是id和void *之间的区别。在这种情况下,你似乎在问为什么它是无效的。

这是无效*因为这是你的指针。没有人,但你会用这个。该指针不会被保留或以其他方式使用。当动画调用你的回调方法时,它会将此指针返回给你。你用它做什么取决于你在上下文中的含义:首先。

虚空*可以让你做很多事情。您可以传入标准的objective-c对象。您可以传递一个简单的C风格数据结构。你可以传入一个函数指针。你可以通过零而不做任何事。