Shared
V2EX  ›  问与答

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

  •  1
     
  •   Shared · Jul 25, 2014 · 4055 views
    This topic created in 4328 days ago, the information mentioned may be changed or developed.
    6 replies    2014-07-25 21:15:32 +08:00
    danny106
        1
    danny106  
       Jul 25, 2014   ❤️ 1
    可以
    xuan_lengyue
        2
    xuan_lengyue  
       Jul 25, 2014   ❤️ 1
    可以,Objective-C 是动态绑定的,所以你甚至有可能一不小心把父类的 private 方法覆盖掉…
    不知道为什么,我的方法命名准则和 Apple 工程师的很像,所以…全是泪…
    LINAICAI
        3
    LINAICAI  
       Jul 25, 2014   ❤️ 1
    这点非常不好,首先养成不好习惯了,我都很少还在h文件声明,第二就是楼上提到的会不小心覆盖了父类。
    Shared
        4
    Shared  
    OP
       Jul 25, 2014
    @danny106
    @xuan_lengyue
    @LINAICAI
    多谢几位的回答,我是学 KVO 的时候发现 observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 不用在头文件里声明。如果什么时候可以这么做,什么时候不应该这么做呢?
    xuan_lengyue
        5
    xuan_lengyue  
       Jul 25, 2014   ❤️ 1
    @Shared 你可以在 Xcode 里右键看一下 Definition,这个方法出现在 Fundation 的 NSKeyValueObserving.h 头文件里,是个 NSObject 的 Category,所以会有代码提示。
    在 Objective-C 里你基本上可以把写在头文件里的方法看作其它语言的 public 方法,不写在头文件里的看作 private 方法,没有具体的对错之分。
    Shared
        6
    Shared  
    OP
       Jul 25, 2014
    @xuan_lengyue 明白了!不过如果这样做相当于 private method 的话,为什么可以被覆盖掉呢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   846 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 19:27 · PVG 03:27 · LAX 12:27 · JFK 15:27
    ♥ Do have faith in what you're doing.