如果只在 .m 文件里定义了一个函数,而未在相应的 .h 文件里声明这个函数的原型,那么这个函数能否在运行时自动被找到?

2014-07-25 10:17:19 +08:00
 Shared
3526 次点击
所在节点    问与答
6 条回复
danny106
2014-07-25 10:20:06 +08:00
可以
xuan_lengyue
2014-07-25 10:28:12 +08:00
可以,Objective-C 是动态绑定的,所以你甚至有可能一不小心把父类的 private 方法覆盖掉…
不知道为什么,我的方法命名准则和 Apple 工程师的很像,所以…全是泪…
LINAICAI
2014-07-25 10:51:33 +08:00
这点非常不好,首先养成不好习惯了,我都很少还在h文件声明,第二就是楼上提到的会不小心覆盖了父类。
Shared
2014-07-25 12:21:49 +08:00
@danny106
@xuan_lengyue
@LINAICAI
多谢几位的回答,我是学 KVO 的时候发现 observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 不用在头文件里声明。如果什么时候可以这么做,什么时候不应该这么做呢?
xuan_lengyue
2014-07-25 13:56:12 +08:00
@Shared 你可以在 Xcode 里右键看一下 Definition,这个方法出现在 Fundation 的 NSKeyValueObserving.h 头文件里,是个 NSObject 的 Category,所以会有代码提示。
在 Objective-C 里你基本上可以把写在头文件里的方法看作其它语言的 public 方法,不写在头文件里的看作 private 方法,没有具体的对错之分。
Shared
2014-07-25 21:15:32 +08:00
@xuan_lengyue 明白了!不过如果这样做相当于 private method 的话,为什么可以被覆盖掉呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/124411

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX