为什么说OC是没有绝对的私有方法的

Java/C#等面向对象语言中,方法的访问权限可以通过public/private/protected来控制其访问权限。而在OC中,方法却并没有访问修饰符。OC中是没有绝对的私有方法的。

 OC是一门非常动态化的语言,即使是我们写了一个私有变量,照样可以通过KVC来强制修改,依旧称不上是安全的。那么将属性直接写入类扩展中,不失为一种安全的做法,这就是class extension存在的意义。写入类扩展后,使用KVC访问不到属性存在,但是可以访问到方法。

 由于Objective-C的动态消息传递机制,OC中不存在真正意义上的私有方法。私有方法只是没有公开文档,同样可以使用运行时特性来调用。

因为:在编译时,即使这个方法不在头文件中声明,编译器仍然会将方法的签名编译进类的方法列表中,发送消息时,会自动查找消息列表,如果找到同名消息,则会被触发.



调用私有方法:

SEL selector = NSSelectorFromString(@"privateMethod");

    Object *ob = [[Objectalloc]init];

    IMP imp = [obmethodForSelector:selector];

    typedefvoid (*func_t)(id,SEL);

    func_t func = (func_t)imp;

    func(ob,selector);


// 私有方法:

- (void)privateMethod {

    NSLog(@"private");

}


访问并修改私有变量:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值