如题,Objective-C无私有方法是什么意思?确实我在.h文件中声明的所有方法除了静态方法就是public方法,但是我再.m文件中随便声明的方法,子类是看不到的,当然performselector还是可以执行的,但是这样算不算是一种私有方法呢?
PHP中文网2017-04-22 09:01:28
obj c沒有嚴格的私有方法, 這是它的方法呼叫機制決定的, 在obj c裡呼叫一個物件的某個方法, 其實就是給這個物件一個訊息, 這個物件看看自己能不能處理這個訊息,如果能處理就呼叫對應的方法實現, 如果不能處理就會拋異常,這個完全是運行時的動作。所以即便一個沒有在頭文件裡顯示聲明的方法, 也可以在運行時被調用, 而且是跟你在頭文件裡聲明了沒有區別, 最多就是在xcode裡會給你一個warning。
靜態方法也是一樣, 因為一個類別本身也是一個對象, 呼叫靜態方法, 也就是給這個對象發送一個訊息。
所謂的私有方法(不定義在頭文件裡),我個人覺得更多的是一種程式設計師們對自己的約束, 比如沒放在頭文件裡, 就是不暴露出去的意思, 就是這個方法是不希望在外面被調用到的, 雖然你想用的話一樣可以用。
參考這篇文章, 說的很詳細清楚: http://blog.jobbole.com/45963/
怪我咯2017-04-22 09:01:28
有啊,interface中的類別目和延展就相當於私有方法。
類別目:類別名稱+擴充方法;延展:@implementation區域
你可以去搜尋一下。
PHP中文网2017-04-22 09:01:28
所有在.h 中聲明的方法,預設都是公開的。
如果想它變成私有的,無須在.h中聲明,直接在.m中實現即中。建議所有私有方法以p_開頭,ex:
- (void) p_myFirstMethod
{
//todo..
}