Objective-C iOS应用程序中的C风格函数

时间:2014-09-12 11:06:57

标签: ios objective-c c cocoa cocoa-touch

正如我们许多人所知 - 我们可以在Objective-C iOS应用程序中使用C风格的函数,例如:

NSString* returnTen() {
    return @"Ten";
}

但是,何时使用C风格函数而不是常规的Objective-C方法是否合理?或者只是在一般情况下会在iOS应用程序中使用C风格的函数?

2 个答案:

答案 0 :(得分:2)

使用你所说的" C-Style功能"没有错。在iOS项目中。 Objective-C是C的超集 - 所以在某种程度上,你总是在写C.

通常情况下,当函数的用途非常原子和/或您希望"内联"函数在其余代码中执行的操作。例如,您可能需要一个函数来计算两个给定整数中最大的一个。因为这是一个小小的"要做的事情并不值得(通常很小)发送一个完整的Objective-C消息(幕后需要使用objc_msgSend()才能工作)的开销,你可以将它实现为一个小C功能。所以,而不是

- (int)biggerIntegerOf:(int)a and:(int)b {
    return a > b ? a : b;
}

你可以使用

static inline int max(int a, int b) {
    return a > b ? a : b;
}

通过指定" inline"你给编译器一个提示,说明"在我的代码中我调用函数max()的地方,你可以直接将其内容内联到位,好像我在那里复制并粘贴它一样#34 ;

答案 1 :(得分:2)

  

但是,何时使用C风格函数而不是常规的Objective-C方法是否合理?

完全合理使用函数而不是类和方法,只要您想定义一个不与对象及其数据相关联的操作。这样做与面向对象的编程风格是对立的,所以大多数人通常喜欢在可能的情况下使用类来做事情,但是在这里和那里写一个函数肯定不是不合理的如果它符合你的目的。

  

或者一般情况下,人们会在iOS应用程序中使用C风格的函数吗?

显而易见的情况是,您正在使用提供功能的库或框架。其中有很多。一些例子:

  • 基于C的系统框架,如Core Foundation和Core Graphics
  • POSIX / C标准库
  • 您碰巧需要的任何第三方C库

另外,请考虑块非常类似于函数,区别主要在于它们具有与它们相关联的状态。块在现代Objective-C中被广泛使用,并且在许多情况下,它们通过替换或避免委托方法等来简化API。