0

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

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

例如,以下 C 结构:

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

有一个NSDate课程。那么像上面这样的 C 结构有什么意义呢?

4

3 回答 3

2

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

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

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

于 2013-10-20T20:42:31.907 回答
0

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

  1. 与另一种语言交互,例如在使用 C、C++ 等的游戏项目中

  2. 与一些 Apple 框架通信:Quartz Core 等

...

于 2013-10-20T20:55:44.607 回答
0

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

分数或复数怎么样?这可能由两个浮点数表示。它应该表现得像double堆栈分配,按值传递 - 还是像对象一样 - 堆分配,按引用传递?表现double得最有意义,毕竟它们只是数字......

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

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

在什么应该是值类型和什么应该是对象类型之间划定界限有些主观。但一般来说,如果类型是“类似数字”,那么使用值类型可能是一个好的或更好的选择。

于 2013-10-20T21:20:18.143 回答