Heim > Fragen und Antworten > Hauptteil
如题,Objective-C无私有方法是什么意思?确实我在.h文件中声明的所有方法除了静态方法就是public方法,但是我再.m文件中随便声明的方法,子类是看不到的,当然performselector还是可以执行的,但是这样算不算是一种私有方法呢?
PHP中文网2017-04-22 09:01:28
obj c没有严格的私有方法, 这是它的方法调用机制决定的, 在obj c里调用一个对象的某个方法, 其实就是给这个对象发送一个消息, 这个对象看看自己能不能处理这个消息,如果能处理就调用相应的方法实现, 如果不能处理就会抛异常,这个完全是运行时的动作。所以即便一个没有在头文件里显示声明的方法, 也可以在运行时被调用, 而且是跟你在头文件里声明了没有区别, 最多就是在xcode里会给你一个warning。
静态方法也是一样, 因为一个类本身也是一个对象, 调用静态方法, 也就是给这个对象发送一个消息。
所谓的私有方法(不定义在头文件里),我个人觉得更多的是一种程序员们对自己的约束, 比如没放在头文件里, 就是不暴露出去的意思, 就是这个方法是不希望在外面被调用到的, 虽然你想用的话一样可以用。
参考这篇文章, 说的很详细清晰: http://blog.jobbole.com/45963/
怪我咯2017-04-22 09:01:28
有啊,interface中的类目和延展就相当于私有方法。
类目:类名+扩展方法;延展:@implementation区域
你可以去搜索一下。
PHP中文网2017-04-22 09:01:28
所有在.h 中声明的方法,默认都是公开的。
如果想它成为私有的,无须在.h中声明,直接在.m中实现即中。建议所有私有方法以p_开头,ex:
- (void) p_myFirstMethod
{
//todo..
}