在Objective C中使用C结构有什么好处?

时间:2013-10-20 20:35:51

标签: objective-c struct

我目前正在学习Objective C,并且我遇到了C结构的使用。但是,我一直想知道以下问题的答案:

如果我们可以创建Objective C类,那么使用C结构的优点或重点是什么?

例如,以下C结构:

struct date {
    int day;
    int month;
    int year;
};

有一个NSDate类。那么C结构的重点是什么呢?

3 个答案:

答案 0 :(得分:2)

您可以将C结构传递给您直接链接到程序中的C或C ++库,例如Unix系统调用。

UIKit和Foundation使用许多C结构,例如CGRect和NSRange。

NSNumber的NSNrray比简单的C数组要贵得多。您不希望将绘图上下文表示为NSArray的NSArray,表示表示像素的NSNumber行。您需要对原始位进行简明描述。

答案 1 :(得分:0)

在Objective C项目中使用C结构的原因是:

  1. 与其他语言交互,例如在使用C,C ++等的游戏项目中

  2. 与某些Apple框架进行通信:Quartz Core等

  3. ...

答案 2 :(得分:0)

问问自己,使用double是什么意思? double是一种抽象数据类型(它以内部存储的多个位以您不需要知道的格式)并按值传递。您可以使用基于对象的浮点数(例如NSNumber),但对于标准数学,您为什么要这样做?

分数或复数如何?这可能由两个浮点数表示。它的行为应该像double - 堆栈分配,按值传递 - 或者像对象 - 堆分配,通过引用传递?表现得像double最有意义,毕竟他们只是数字......

现在考虑一个点,它也可能由两个浮点数表示 - 值类型或对象类型行为? Apple使用NSPoint的值类型,查看其定义,您会看到struct。这是你认为正确的选择吗?

如果NSDate只存储了一年/月/日,那么Apple可能已经选择了struct,但其日历和时区支持的数量远不止于此。但是NSTimeInterval是值类型(甚至不是struct,只是double的别名。)

在哪里绘制应该是值类型和应该是对象类型之间的边界有点主观。但一般来说,如果类型是“数字”,那么使用值类型可能是一个好的,或更好的选择。