V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Shared
V2EX  ›  问与答

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

  •  1
     
  •   Shared · 2014-07-25 10:17:19 +08:00 · 3529 次点击
    这是一个创建于 3783 天前的主题,其中的信息可能已经有所发展或是发生改变。
    6 条回复    2014-07-25 21:15:32 +08:00
    danny106
        1
    danny106  
       2014-07-25 10:20:06 +08:00   ❤️ 1
    可以
    xuan_lengyue
        2
    xuan_lengyue  
       2014-07-25 10:28:12 +08:00   ❤️ 1
    可以,Objective-C 是动态绑定的,所以你甚至有可能一不小心把父类的 private 方法覆盖掉…
    不知道为什么,我的方法命名准则和 Apple 工程师的很像,所以…全是泪…
    LINAICAI
        3
    LINAICAI  
       2014-07-25 10:51:33 +08:00   ❤️ 1
    这点非常不好,首先养成不好习惯了,我都很少还在h文件声明,第二就是楼上提到的会不小心覆盖了父类。
    Shared
        4
    Shared  
    OP
       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
        5
    xuan_lengyue  
       2014-07-25 13:56:12 +08:00   ❤️ 1
    @Shared 你可以在 Xcode 里右键看一下 Definition,这个方法出现在 Fundation 的 NSKeyValueObserving.h 头文件里,是个 NSObject 的 Category,所以会有代码提示。
    在 Objective-C 里你基本上可以把写在头文件里的方法看作其它语言的 public 方法,不写在头文件里的看作 private 方法,没有具体的对错之分。
    Shared
        6
    Shared  
    OP
       2014-07-25 21:15:32 +08:00
    @xuan_lengyue 明白了!不过如果这样做相当于 private method 的话,为什么可以被覆盖掉呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1546 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:06 · PVG 01:06 · LAX 09:06 · JFK 12:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.