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