objective-c – 使用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代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用Swift在图像上显示标记的用户名
- Vue波纹按钮组件制作
- c# – 在Parallel.ForEach中指定默认的MaxDegreeOfParallel
- ruby-on-rails – 如何在Rails 3中简化“render_to_string”
- c# – 如何查看System.Math.Sin的源代码?
- Swift (3) Character and String
- JLINK烧写BIN文件到nand、norflash、SDRAM
- AliSQL 20171010版本发布 Sequence兼容PostgreSQL/Oracle语
- ruby-on-rails – 测试:在anaf中的reject_if
- Sqlite使用