CGPoint

结构的一个非常好的例子是 CGPoint; 它是一个表示二维点的简单值。它有 2 个属性,xy,可以写成

typedef struct {
    CGFloat x;
    CGFloat y;
} CGPoint;

如果你之前使用过 Objective-C for Mac 或 iOS app 开发,你几乎肯定会遇到 CGPoint; CGPoints 在屏幕上占据了几乎所有的位置,从视图和控件到游戏中的对象,再到渐变的变化。这意味着 CGPoints 被大量使用。对于真正重量级的游戏来说,情况更是如此。这些游戏往往有很多对象,所有这些对象都需要位置。这些位置通常是 CGPoints,或者是传达点的某种其他类型的结构(例如 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,则创建和操作点需要更长的时间。在更小,更快的程序中,这不会真正产生差异,在这些情况下,使用对象点会更好或甚至更好。但是在大量使用点的大型程序中,使用对象作为点可能会严重损害性能,使程序变慢,并浪费内存,这可能会导致程序崩溃。