Objective-C程序中的C风格太多了?

Gui*_*oMB 7 cocoa objective-c

嗨,我正在写这个问题,因为我是ObjC的新手,在尝试制作拳头训练应用程序时,我想到了很多疑问.问题是我在C方面有很强的背景,去年我一直用Java编程,而且我用Smalltalk做了一些拼贴画(我这是因为那些是我的编程参考资料,而那些是我的语言' m比较ObjC).

我遇到的第一个问题是我不知道在ObjC和C之间画一条线的位置,例如在处理数学运算时,我应该使用math.h还是有更多像你这样的"对象方式"可以用Smalltalk(aNumber raiseTo:3)吗?C中没有背景的人如何学习ObjC?

我找不到的另一件事是集合的协议(我查看了Apple提供的Foundation Framework文档).因为我想实现一个expresion树类,我想知道是否有所有集合应该实现的方法(比如在Smalltalk或Java中),或者我需要手动检查每个集合,看看我的新集合是否应该有一个很酷的方法有.

我不知道我是不是太傻了,或者我正在寻找语言/框架没有的功能.我想在ObjC中编写ObjC风格,不考虑C,Java或Smalltalk.

对不起,如果问题太长了.

Ste*_*non 11

绝对使用<math.h>.您无法为在30个周期内运行的函数支付消息发送开销.甚至函数调用开销在这一点上看起来也相当陡峭.

更一般地,根据需要使用尽可能多的C风格.我已经看到Objective-C只是一些C模块与目标C消息粘合在一起,我看到Objective-C基本上没有方括号的零行代码.我看过两种方式都写出了漂亮,有效的代码.好的代码是很好的代码,但是你写的.


Chu*_*uck 6

通常,您将使用C特征进行数值计算.您通常会将对象用于大多数其他事物.这样做的原因是对象比简单的标量更重 - 它没有任何好处.你写的[[NSNumber numberWithInteger:1] numberByAddingNumber:[NSNumber numberWithInteger:2]]时为什么要写1+2?阅读不仅痛苦,而且速度慢得多,也无法获得任何好处.

另一方面,Cocoa拥有丰富的字符串,数组,网络和许多其他领域的对象库,使用它们是一个巨大的胜利.

知道那里有什么 - 以及最简单的做事方式 - 只是学习的问题.如果您认为某些内容应该存在且无法找到,您可以在此处或Apple的Cocoa-Dev邮件列表中查询.

至于收集协议 - 真的没有一个.最接近它的是NSFastEnumeration协议,它正好定义了一种方法:countByEnumeratingWithState:objects:count:.这使您可以使用for (id someObject in someCollection)语法枚举集合中的对象.否则,所有集合都定义自己的独立接口.


Qui*_*lor 3

我遇到的第一个问题是我不知道在 ObjC 和 C 之间划清界限。

我的规则是只要对你有意义的地方就使用 C。Objective-C 的好处是让你选择何时采用过程化以及何时采用面向对象。选择最适合您正在编写的代码的内容。

我找不到的另一件事是集合的协议[...]我想实现一个表达式树类,我想知道是否有所有集合都应该实现的方法(就像在Java中)或者我必须手动检查每个集合看看有没有我的集合应该有的方法。

与 Java 不同,Objective-C 没有像java.util.Collection接口那样的集合主协议。此外,也没有像 Java 那样大量增加特定的容器实现。但是,这使您可以自由地以对您的代码有意义的方式实现集合。

为了构建树状结构,您可以查看NSTreeNode看看它是否有用。(这可能超出您的需要或想要的,但可能值得一试。)

至于滚动您自己的集合,我在创建CHDataStructures.framework时学到了很多东西,欢迎您使用该代码中您喜欢的任何内容,或者只是看看我创建类似 Cocoa 的结构的尝试,旨在补充基金会的收藏和运作方式类似。祝你好运!