IOS中的void*和id
2017-03-11 本文已影响1149人
pyboy
先说说void
void func1(void)
void func2(void)
前者表明,此函数没有参数,也没有返回值。
后者表明,此函数有参数,且参数是指向任意类型的指针。此函数有返回值,且返回值是指向任意类型的指针。
void*和id的区别
void *在C语言中常用,并不是OC对象
id类型用于隐藏对象类型的类名部分,相当于C语言中的“void *”。但是id本身就是一个指针,而且可以指向任何一个继承了Object(或者NSObject)类的对象。所以需要注意的是:id是一个指针,所以你在使用id的时候不需要加星号。比如id foo=nil定义了一个nil指针,这个指针指向NSObject的一个任意子类。而id *foo=nil则定义了一个指针,这个指针指向另一个指针,被指向的这个指针指向NSObject的一个子类。
比如id person和void* personV,[person print]是可以的,但是[personV print]在编译的时候就会报错。因为ObjeciveC的编译器看到id,会假定它可以接受任何message,虽然在runtime时可能并不是这样的,但personV并不是Objective C类型,编译器就会报错,但是void *有可能是可以接收print message的。