为什么说OC是没有绝对的私有方法的
来源:互联网 发布:mac更新卡住 强制重启 编辑:程序博客网 时间:2024/04/29 14:22
在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"];
- 为什么说OC是没有绝对的私有方法的
- 为什么说 Objective-C 没有私有方法和私有变量
- 为什么说产品化是私有IaaS的唯一出路?
- oc的私有方法
- 如何打印一个类的属性(例如textview里的控件等,基于oc里没有绝对的私有变量这一规则实现)
- OC的私有方法命名规范
- 0C-018.OC的私有方法
- 为什么说OC是动态语言?
- OC基础—类的私有方法和私有变量
- 为什么说网络实名是不得人心的举动
- 为什么说编程是独一无二的
- 为什么说JAVA是跨平台的?
- 为什么说计算机语言是相通的?
- 为什么说cache是persist的特例?
- 为什么说ArrayList是线程不安全的?
- 为什么说ArrayList是线程不安全的?
- 为什么说FPGA是硬件并行的?
- 为什么说python的多线程是鸡肋?
- 基于localstorage实现购物车功能
- 解决程序开机自动启动方法
- adb操作命令详解
- eclipse的ermaster环境搭建及生成实体bean
- webx - SpringExt
- 为什么说OC是没有绝对的私有方法的
- 集合的子集
- c#操作Excel类
- text/html & text/plain的区别
- Reconstruct Itinerary
- css图片垂直居中自适应
- 数据库之视图、索引
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料
- #if #ifdef和#ifndef的综合应用