什么是(void *)参数

时间:2010-11-05 21:27:41

标签: objective-c

我最近看到了一个委托方法(似乎有效),看起来像这样:

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

委托方法然后将数据转换为:

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

为什么这样做并且是良好的编码实践?我本来会使用(id *)theData。

感谢。

2 个答案:

答案 0 :(得分:4)

void *作为一个类型表示可以传递任何指针,并且收到它的代码会将它转换为它认为合适的任何类型。

答案 1 :(得分:0)

它只是意味着指针引用的对象的大小是未声明的。指针将指向内存分配的开始,并由接收器以适当的方式转换或读取内存。

如果指定了类型,指针仍然指向内存分配的开头,但是如果你增加它的位置,它将跳过该特定类型所需的所有内存,并指向下一个内存块。 / p>

使用void指针,这不会发生。如果增加位置,则可以在内存中找到对象而不是下一个对象。你可以通过这种方式更好地控制内存。

previous SO answer也可能对您有所帮助。