美文网首页iOS
IOS中的void*和id

IOS中的void*和id

作者: pyboy | 来源:发表于2017-03-11 13:40 被阅读1149次

    先说说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的。

    相关文章

      网友评论

        本文标题:IOS中的void*和id

        本文链接:https://www.haomeiwen.com/subject/mabagttx.html