Objective-C iOS应用程序中的C风格函数[关闭]
Posted
技术标签:
【中文标题】Objective-C iOS应用程序中的C风格函数[关闭]【英文标题】:C-style functions in Objective-C iOS application [closed] 【发布时间】:2014-09-12 11:06:57 【问题描述】:我们很多人都知道 - 我们可以在我们的 Objective-C ios 应用程序中使用 C 风格的函数,例如:
NSString* returnTen()
return @"Ten";
但是什么时候使用 C 风格的函数而不是常规的 Objective-C 方法是合理的呢?或者只是在一般情况下人们会在 iOS 应用程序中使用 C 风格的函数?
【问题讨论】:
如何定义 C 风格的函数?因为C既不定义NSString
也不支持@""
字符串。
在实现文件中,@implementation 指令上方
或在@实现中。效果也一样。
是的,没关系。但是无论如何使用它们有什么好处呢?
【参考方案1】:
但是什么时候使用 C 风格的函数而不是常规的 Objective-C 方法是合理的呢?
当您想要定义一个与对象及其数据无关的操作时,使用函数而不是类和方法是完全合理的。这样做有点与面向对象的编程风格对立,因此大多数人通常更愿意在可能的情况下使用类来做事,但如果适合你的情况,到处编写函数肯定不是不合理目的。
或者只是在一般情况下人们会在 iOS 应用程序中使用 C 风格的函数?
最明显的情况是当您使用提供函数的库或框架时。其中有很多。一些例子:
基于 C 的系统框架,例如 Core Foundation 和 Core Graphics POSIX/C 标准库 您碰巧需要的任何第三方 C 库此外,考虑到块与函数非常相似,主要区别在于它们具有与之关联的状态。块在现代 Objective-C 中被广泛使用,并且在许多情况下,它们通过替换或避免委托方法等来简化 API。
【讨论】:
事实上,Objective-C API 希望您在某些情况下使用 C 函数。例如,NSArray 的sortedArrayUsingFunction
方法将函数引用作为参数。
我会称它为 Foundation API,但是是的,绝对如此。而且我显然在这里分裂了头发 - 如果没有 Foundation,Obj-C 将不会很有趣。
我不知道该怎么称呼它——我不太擅长记住花哨的术语。
感谢您的回答 Caleb 和您的 cmets Hot Licks!【参考方案2】:
在 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;
通过指定“内联”,您可以向编译器提示“在我的代码中调用函数 max() 的位置,您可以将其内容直接内联,就像我复制并贴在那里”。
【讨论】:
很好的答案,谢谢 Elwisz。但是如果我想从那个小函数 NSString 中返回呢? 没有什么可以阻止你这样做。请记住,您实际上并没有返回 NSString,而是从函数中返回指向 NSString 的指针。所以用普通的 C 来做这件事真的没有什么特别的。以上是关于Objective-C iOS应用程序中的C风格函数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 上使用 Objective-C 触发按需 ***