古詩詞大全網 - 藝術簽名 - 為什麽OC沒有絕對的私有方法?

為什麽OC沒有絕對的私有方法?

在Java/C#等面向對象語言中,方法的訪問權限可以由public/private/protected控制。在OC中,方法沒有訪問修飾符。OC中沒有絕對的私有方法。

OC是壹種非常動態的語言。即使我們寫了壹個私有變量,我們仍然可以通過KVC強制修改它,這仍然是不安全的。然後,將屬性直接寫入類擴展(稱為類)是安全的。

外延存在的意義。編寫完類擴展後,KVC不能訪問屬性,但可以訪問方法。

由於Objective-C的動態消息機制,OC中沒有真正的私有方法。私有方法只是沒有公共文檔,也可以使用運行時特性調用。

因為:在編譯時,即使頭文件中沒有聲明這個方法,編譯器還是會把方法的簽名編譯到類的方法列表中。發送消息時,它會自動查找消息列表,如果發現同名消息,就會觸發。

調用私有方法:

SEL selector = NSSelectorFromString(@ " private method ");

object * ob =[[object alloc]init];

IMP IMP =[obmethodForSelector:selector];

typedefvoid (*func_t)(id,SEL);

func _ t func =(func _ t)imp;

func(ob,選擇器);

//私有方法:

- (void)privateMethod {

NSLog(@“private”);

}

訪問和修改私有變量:

[object setValue:@ " value " for key:@ " key "];