先說說void
void func1(void)
void func2(void)
前者表明耽装,此函數(shù)沒有參數(shù)卷扮,也沒有返回值。
后者表明扎谎,此函數(shù)有參數(shù)桂躏,且參數(shù)是指向任意類型的指針钻趋。此函數(shù)有返回值,且返回值是指向任意類型的指針剂习。
void*和id的區(qū)別
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的辖所。