【问题标题】:Are C functions bad style in Objective-C interfaces?Objective-C 接口中的 C 函数风格不好?
【发布时间】:2013-01-17 10:22:27
【问题描述】:

我声明了一个带有一些函数和一些方法的接口。而不是声明:
-(void)foo;
+(void)bar;

我声明:
-(void)foo;
void bar();

我觉得还好。编译器认为没问题。其他程序员也觉得没问题吗?

【问题讨论】:

    标签: objective-c coding-style


    【解决方案1】:

    选择 C ​​函数或静态方法时的顾虑:(从我的头顶)

    • 名称冲突:首选静态方法。
    • 功能:名称就像道路,它们告诉你你在哪里以及你可以去哪里。如果代码与其他内容相关,则应将其设为类方法。即使它是不相关方法的垃圾转储(xxxUtils 类)。否则使用 C 函数。
    • 局部性:更喜欢使用静态方法将代码分组到更高级别的单元中(因为从 30,000 英尺处更容易看到和理解)。
    • 键入:C 函数需要的更少。 CGPointMake 便利功能在输入更多时不会那么方便。
    • 链接:在运行时之前看到对 C 函数的错误调用。
    • 全局状态:不是选择标准,但值得一提的是,在 OOP 语言中,C 函数和类方法的输出应仅取决于它们的输入。触摸全局状态会违反封装、隐藏依赖项、使代码更难理解等。
    • 重载:使用__attribute__((overloadable)) 标记时可以重载C 函数。

    【讨论】:

    • 感谢您的意见。好,客观。现在我想要一个好的和主观的来补充它:)
    【解决方案2】:

    我不太明白问题的重点。您可以类似地一起声明它们:

     -(void)foo;
     +(void) bar;
     void bar();
    

    所有在目标 C 中都是合法的,并且可以同名共存,因为它们是不同的实体(实例方法、类方法、C 函数)。您可以毫无问题地从前者中调用 void bar(),但不是 v/v,因为 void bar() 没有传递对 self 的引用。

    如果问题是风格问题,我会将 C 函数与 @interface 分开声明,因为它们不是 Objective-C。

    对于最新版本的 Clang,如果它们不是供公众使用的,则根本不需要声明这些...

    更新

    阅读了@Jano 的回答后,我现在更了解了问题的重点:为什么选择一个类方法而不是一个可以实现相同结果的函数(两者都无法访问self)。这些天来,我倾向于总是使用类方法,它似乎在 obj-C 上下文中才有意义。 Jano 的回答似乎非常详尽。

    【讨论】:

    • 这纯粹是风格问题,是的。我可能会在@interface 之外但在同一个头文件中声明它们。如果它们是私有的,我会在实现的源文件中声明它们 static
    【解决方案3】:

    这只是USED-TO的问题。

    我会选择 Objective-C 风格的方法,除非我需要一些仅在 C 中可用的函数,例如 pow()。

    即使你想添加一个C方法,我觉得它应该在一个单独的文件中,如AllCMethods.c这样会更容易回忆,记住,使用所有obj-c方法和C方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2013-12-13
      • 1970-01-01
      • 2010-10-20
      相关资源
      最近更新 更多