【问题标题】:What's the difference between void* and id? [duplicate]void* 和 id 有什么区别? [复制]
【发布时间】:2011-04-25 01:19:48
【问题描述】:

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

例如,一个 UIView 动画委托回调方法有这个参数:

context:(void*)context

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

【问题讨论】:

标签: iphone objective-c ipad


【解决方案1】:

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

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

成为一个空虚*可以让你做很多事情。你可以传入一个标准的objective-c对象。您可以传递一个简单的 C 风格数据结构。你可以传入一个函数指针。你可以传递 nil 而什么也不做。

【讨论】:

    【解决方案2】:

    它允许你传递一个指向你喜欢的任何东西的指针。可以是 obj-c 对象、指向某个数组的指针、结构等等。 void * 类型只是最通用的“随便什么”类型。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-24
        • 2017-12-05
        • 2012-08-09
        相关资源
        最近更新 更多