在评论中与您进行了一些扩展讨论后:
MKOverlayView 的可覆盖功能,例如canDrawMapRect
不能轻易追溯到它们的调用代码,因为该代码在 MapKit.framework 中的某处被混淆了。
相反,典型的方法是重新阅读他们的文档,直到您了解框架使用该函数的目的。(有反编译二进制文件之类的东西,尽管这通常是不受欢迎的,我不推荐它。)
canDrawMapRect
文档:http: //developer.apple.com/library/ios/documentation/MapKit/Reference/MKOverlayView_class/Reference/Reference.html#//apple_ref/doc/uid/TP40009715-CH1-SW10
在阅读了他们的文档后,我推断出: MapKit.framework 中的某处,在canDrawMapRect
实际绘制视图之前被调用。如果你没有在你的子类中重写那个函数,它会调用超类的默认实现,它总是返回 YES 然后调用drawMapRect:
(如果你是子类化 MKOverlayView 必须重写,否则什么都不会绘制!)
您在上面链接的类可能会返回 NO。在这种特殊情况下,MapKit.framework 中的代码似乎跳过了调用drawMapRect:
,并且没有显示(或刷新)任何内容。
所以,长话短说:对于这种情况,您必须扮演代码侦探的角色,并希望文档写得足够清楚,以便在无法查看所有代码的情况下弄清楚。
编辑:只是为了进一步澄清 - 看来 MKOverlayView 必须被子类化才能实际生成可见的东西。
在解决您的潜在问题之前我的原始答案-
简短的回答:这些是在该类中使用的私有函数。
长答案:在实现文件顶部的空名称类别中声明的函数仅对该类别扩展的类可见。因此,这些函数只能在该类的实现中调用。(C++ 等价物只是将函数声明为私有)
这 4 个函数中的 3 个在同一个 .m 文件中调用。没有挖掘,我猜他们写了第一个函数,然后决定不使用它。