加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 使用C函数而不是静态方法使纯函数成为一个糟糕的

发布时间:2020-12-16 09:46:25 所属栏目:百科 来源:网络整理
导读:如果我正在实现一个基于某个输入执行某些计算的函数,并返回输出而不会产生任何副作用. 我总是使用Regular C函数而不是在类中使用静态方法. 使用静态方法强制放入类中是否有理由? 我不是在讨论创建单例或工厂方法的方法,而是像那里那样的常规方法: 而不是像
如果我正在实现一个基于某个输入执行某些计算的函数,并返回输出而不会产生任何副作用.

我总是使用Regular C函数而不是在类中使用静态方法.

使用静态方法强制放入类中是否有理由?

我不是在讨论创建单例或工厂方法的方法,而是像那里那样的常规方法:

而不是像这样的东西:

+(NSString *)generateStringFromPrefixString:(NSString *)prefixString word:(NSString *)word;

这不会更好吗?

NSString *generateString(NSString *prefixString,NSString *word);

在效率方面,我们不会保存,查找选择器以获取函数指针?

解决方法

我不认为这是不好的设计,不,但在某些情况下,人们可能认为比另一个更合适.关键问题是:

>这个方法属于一个类吗?
>这种方法值得添加到一个类中吗?

类是自包含和可重用的东西.对于您示例中的方法,我很想回答“是的,它确实/是”,因为它是特定于NSString的东西,并且是您(可能)想要经常使用的方法.它的参数也是NSString类型.因此,我会在类扩展中使用消息表单,并在需要时#import扩展.

有两种情况(在我的头顶),这是不合适的.首先是该方法与“主类”之外的其他实体具体交互的情况.可以在Apple的NSObjcRuntime.h文件底部附近找到此示例.这些都是标准的C函数.它们并不属于特定的类.

使用标准C函数的第二种情况是在非常特定的情况下它只使用一次(或非常几次). UIApplicationMain是一个完美的例子,也可以想到特定UIView子类的-drawRect:方法的辅助方法.

关于效率的最后一点.是的,选择器查找比较慢的标准C调用.但是,运行时(Apple至少不能对GCC发表评论)确实使用了缓存系统,因此最常发送的消息很快就会转移到选择器表的“顶部”.

免责声明:这在某种程度上是一种风格的问题,上面的建议是我这样做的方式,因为我认为它使代码更有条理和可读性.我确信还有其他同样有效的方法来构造/交错C和Objective-C代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读