Objective-CIOS应用中的C风格函数

Objective-CIOS应用中的C风格函数,ios,objective-c,c,cocoa,cocoa-touch,Ios,Objective C,C,Cocoa,Cocoa Touch,正如我们许多人所知,我们可以在Objective-C iOS应用程序中使用C风格的函数,例如: NSString* returnTen() { return @"Ten"; } 但是什么时候用C型函数代替常规的客观C方法才合理呢?或者,通常在iOS应用程序中使用C风格函数?在iOS项目中使用所谓的C风格函数并没有什么错。Objective-C是C的超集,所以在某种程度上,你一直在写C 通常,当函数的用途是非常原子的和/或希望在代码的其余部分内联函数所做的事情时,您有资格使用纯C函数。例

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

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

但是什么时候用C型函数代替常规的客观C方法才合理呢?或者,通常在iOS应用程序中使用C风格函数?

在iOS项目中使用所谓的C风格函数并没有什么错。Objective-C是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的地方,您可以将它的内容直接内联到适当的位置,就像我复制并粘贴它一样

但是什么时候用C型函数代替常规的客观C方法才合理呢

当您想要定义一个与对象及其数据无关的操作时,使用函数而不是类和方法是完全合理的。这样做有点与面向对象编程风格背道而驰,因此大多数人通常会在可能的情况下喜欢使用类进行操作,但如果函数符合您的目的,在这里或那里编写函数肯定不是不合理的

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

最明显的情况是当您使用提供函数的库或框架时。其中有很多。一些例子:

基于C的系统框架,如核心基础和核心图形 POSIX/C标准库 您需要的任何第三方C库

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

如何定义C风格的函数?因为C既不定义NSString,也不支持@strings。在实现文件中,在@implementation directive上方或@implementation内。效果也一样。是的,没关系。但是使用它们的好处是什么呢?回答得好,谢谢Elwisz。但是如果我想从这个小函数NSString返回呢?没有什么可以阻止你这么做。请记住,您并不是真正返回NSString,而是从函数返回指向NSString的指针。因此,用纯C实现它并没有什么特别之处。事实上,Objective-CAPI希望您在某些情况下使用C函数。例如,有一个SnDaRayRayuSuffic函数方法,它将函数引用作为参数。我称之为基础API,但绝对是。我显然在这里吹毛求疵——Obj-C没有基础就不好玩了。我不知道该怎么称呼它——我不太擅长记住花哨的术语。谢谢你的回答,Caleb和你的评论很热心。