我目前正在学习目标 C,并且遇到了 C 结构的使用。但是,我一直想知道以下问题的答案:
如果我们可以创建 Objective C 类,那么使用 C 结构的优势或意义是什么?
例如,以下 C 结构:
struct date {
int day;
int month;
int year;
};
有一个NSDate
课程。那么像上面这样的 C 结构有什么意义呢?
我目前正在学习目标 C,并且遇到了 C 结构的使用。但是,我一直想知道以下问题的答案:
如果我们可以创建 Objective C 类,那么使用 C 结构的优势或意义是什么?
例如,以下 C 结构:
struct date {
int day;
int month;
int year;
};
有一个NSDate
课程。那么像上面这样的 C 结构有什么意义呢?
您可以将 C 结构传递给直接链接到程序中的 C 或 C++ 库,例如 Unix 系统调用。
UIKit 和 Foundation 使用许多 C 结构体,例如 CGRect 和 NSRange。
一个 NSNumber 的 NSArray 比一个简单的 C 数字数组要昂贵得多。您不希望将绘图上下文表示为 NSArray 的 NSArray 表示代表像素的 NSNumber 行。您需要对原始位的简明描述。
在 Objective C 项目中使用 C 结构的原因是:
与另一种语言交互,例如在使用 C、C++ 等的游戏项目中
与一些 Apple 框架通信:Quartz Core 等
...
问问自己,使用,说,有什么意义double
?Adouble
是一种抽象数据类型(它在内部以您不需要知道的格式存储多个位)并按值传递。您可以使用基于对象的浮点数(例如NSNumber
),但对于标准数学,您为什么要使用?
分数或复数怎么样?这可能由两个浮点数表示。它应该表现得像double
堆栈分配,按值传递 - 还是像对象一样 - 堆分配,按引用传递?表现double
得最有意义,毕竟它们只是数字......
现在考虑一个点,它也可能由两个浮点数表示 - 值类型或对象类型行为?Apple 使用了值类型 for NSPoint
,看看它的定义,你会看到它的 a struct
。在您看来,这是正确的选择吗?
如果NSDate
只存储年/月/日,那么 Apple 可能选择了一个struct
,但它的日历和时区支持不止于此。然而NSTimeInterval
是一个值类型(甚至不是一个struct
,只是一个别名double
)。
在什么应该是值类型和什么应该是对象类型之间划定界限有些主观。但一般来说,如果类型是“类似数字”,那么使用值类型可能是一个好的或更好的选择。