文章目录

Objective-C本身并没有私有方法的概念。一个类中定义的方法–不管是类本身定义的还是Category中定义的–最终都会出现在objc_class结构体的objc_method_list链表中。

在开发中,经常有些方法我们不希望暴露给外界,所以并不会在头文件中去声明,而是直接在.m文件中去实现,也许为了区分,还会为方法加上类似于”xx_”这样的前缀,如图1所示,以这种方式定义”私有方法“。

但这只是一种障眼法,在外部调用时,确实是看不到,如果我们直接调用这些方法,编译器会报错,但如果用performSelector:来调用,依然可以正常执行。

上面这种问题通常可以避免。一个潜藏的问题是出现在继承体系里面。如果父类和子类的.m文件定义了两个同名的”私有方法“,则子类的方法会覆盖父类的方法,这样我们可能会在不经意间修改了父类的一些实现。

在继承第三方非开源库中的类时,如果遇到这种情况,会是一种很淡疼的感觉,那样你只能修改自己的方法名了。

文章目录