Foundation’s NSRect structure, defined in NSGeometry.h.
typedef struct { NSPoint origin; NSSize size; } NSRect;
The NSRect struct differs from QuickDraw’s Rect struct in two important ways:
The NSRect struct is a rectangle defined by an origin expressed as coordinates and by its height and width. QuickDraw’s Rect defines all four sides of its rectangle as coordinates. Having used both systems for a while I do find the origin/size strategy a little more convenient than the four-coordinates strategy – but one can convert between the two with ease.
The elements of NSRect (origin.x, origin.y, size.width, size.height) are all float types. QuickDraw’s Rect coordinates are all integer numbers. Rect was designed in a time when integer math was vastly faster and addressing individual pixels was all that could be done, whereas Cocoa and CoreGraphics work in a resolution-independent space with the ability to address the areas between pixels.
NSGeometry.h defines a number of helper functions for working with NSRect structs. Some commonly used functions include:
NSStringFromRect is most handy when used in conjunction with NSLog for printing debug messages:
NSLog(@”frameRect = %@”, NSStringFromRect(frameRect));
Note that unlike Carbon API all of these API pass the entire structure on the stack. In Carbon, one typically passes the address of a Rect around. Don’t let that trip you up.
Foundation also defines the global variable:
NSZeroRect
Which is occasionally useful when performing set arithmetic with the aforementioned functions and the like.
Discussion
I cleaned up the page a bit to incorporate the bit about “Carbon’s Rect” being incorrect or ambiguous. I also reworked the part that talked about how Rect was faster because it used ints, since integer math hasn’t been faster than floating point math for well over a decade.