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,則建立和操作點需要更長的時間。在更小,更快的程式中,這不會真正產生差異,在這些情況下,使用物件點會更好或甚至更好。但是在大量使用點的大型程式中,使用物件作為點可能會嚴重損害效能,使程式變慢,並浪費記憶體,這可能會導致程式崩潰。