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 "];