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