搜尋

首頁  >  問答  >  主體

Objective-C无私有方法问题

如题,Objective-C无私有方法是什么意思?确实我在.h文件中声明的所有方法除了静态方法就是public方法,但是我再.m文件中随便声明的方法,子类是看不到的,当然performselector还是可以执行的,但是这样算不算是一种私有方法呢?

PHP中文网PHP中文网2768 天前432

全部回覆(4)我來回復

  • PHPz

    PHPz2017-04-22 09:01:28

    建議看看 http://blog.sunnyxx.com/2014/04/13/objc_dig_interface/

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-22 09:01:28

    obj c沒有嚴格的私有方法, 這是它的方法呼叫機制決定的, 在obj c裡呼叫一個物件的某個方法, 其實就是給這個物件一個訊息, 這個物件看看自己能不能處理這個訊息,如果能處理就呼叫對應的方法實現, 如果不能處理就會拋異常,這個完全是運行時的動作。所以即便一個沒有在頭文件裡顯示聲明的方法, 也可以在運行時被調用, 而且是跟你在頭文件裡聲明了沒有區別, 最多就是在xcode裡會給你一個warning。

    靜態方法也是一樣, 因為一個類別本身也是一個對象, 呼叫靜態方法, 也就是給這個對象發送一個訊息。

    所謂的私有方法(不定義在頭文件裡),我個人覺得更多的是一種程式設計師們對自己的約束, 比如沒放在頭文件裡, 就是不暴露出去的意思, 就是這個方法是不希望在外面被調用到的, 雖然你想用的話一樣可以用。

    參考這篇文章, 說的很詳細清楚: http://blog.jobbole.com/45963/

    回覆
    0
  • 怪我咯

    怪我咯2017-04-22 09:01:28

    有啊,interface中的類別目和延展就相當於私有方法。
    類別目:類別名稱+擴充方法;延展:@implementation區域
    你可以去搜尋一下。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-22 09:01:28

    所有在.h 中聲明的方法,預設都是公開的。
    如果想它變成私有的,無須在.h中聲明,直接在.m中實現即中。建議所有私有方法以p_開頭,ex:
    - (void) p_myFirstMethod
    {
    //todo..
    }

    回覆
    0
  • 取消回覆