CGPoint
结构的一个非常好的例子是 CGPoint
; 它是一个表示二维点的简单值。它有 2 个属性,x
和 y
,可以写成
typedef struct {
CGFloat x;
CGFloat y;
} CGPoint;
如果你之前使用过 Objective-C for Mac 或 iOS app 开发,你几乎肯定会遇到 CGPoint
; CGPoint
s 在屏幕上占据了几乎所有的位置,从视图和控件到游戏中的对象,再到渐变的变化。这意味着 CGPoint
s 被大量使用。对于真正重量级的游戏来说,情况更是如此。这些游戏往往有很多对象,所有这些对象都需要位置。这些位置通常是 CGPoint
s,或者是传达点的某种其他类型的结构(例如 3d 游戏的三维点)。
像 CGPoint
这样的点可以很容易地表示为对象,比如
@interface CGPoint {
CGFloat x;
CGFloat y;
}
... //Point-related methods (e.g. add, isEqualToPoint, etc.)
@property(nonatomic, assign)CGFloat x;
@property(nonatomic, assign)CGFloat y;
@end
@implementation CGPoint
@synthesize x, y;
...
@end
但是,如果以这种方式使用 CGPoint
,则创建和操作点需要更长的时间。在更小,更快的程序中,这不会真正产生差异,在这些情况下,使用对象点会更好或甚至更好。但是在大量使用点的大型程序中,使用对象作为点可能会严重损害性能,使程序变慢,并浪费内存,这可能会导致程序崩溃。