例如,UIView动画委托回调方法具有以下参数:
context:(void*)context
为什么不简单地id?如果我不关心语境,我总是通过nil。但是当我想要一个时,我会传递这个对象。有什么不同?为什么他们更喜欢void * over id?
答案 0 :(得分:7)
id是指向具有isa
指针的结构的指针(指向ObjectiveC运行时,此“事物”是对象)。 void*
只是指向任何可能的指针(可能是另一个id
)。
答案 1 :(得分:2)
允许您将指针传递给您喜欢的任何内容。可以是一个obj-c对象,一个指向某个数组的指针,一个结构,等等。 void *
类型只是最常见的“任何事情”类型。
如果您只是传递零,请不要担心。如果它让你感觉更好,你可以传递NULL。
答案 2 :(得分:2)
我认为你问的不仅仅是id和void *之间的区别。在这种情况下,你似乎在问为什么它是无效的。
这是无效*因为这是你的指针。没有人,但你会用这个。该指针不会被保留或以其他方式使用。当动画调用你的回调方法时,它会将此指针返回给你。你用它做什么取决于你在上下文中的含义:首先。
虚空*可以让你做很多事情。您可以传入标准的objective-c对象。您可以传递一个简单的C风格数据结构。你可以传入一个函数指针。你可以通过零而不做任何事。