0

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

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

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

4

3 回答 3

2

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

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

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

 -(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 的回答似乎非常详尽。

于 2013-01-17T11:04:56.797 回答
0

这只是USED-TO的问题。

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

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

于 2013-01-17T11:15:52.407 回答