Question: Is there any difference between a `CGRect` and an `NSRect`? In particular, I'm wondering about the position of the origin. Are there any important differences I need to know about?

Answer: 
They're the same. [This link](https://web.archive.org/web/20111210052652/http://cocoadev.com/index.pl?CGRect) has more information. Copied here for quick reference:

> 
> `CGRect` is the CoreGraphics equivalent of `NSRect`.
> 
> 
> They are deliberately made to have the same layout in memory. As such, it is allowed to convert an `NSRect` to a `CGRect` by doing this:
> 
> 
> 
> ```
> CGRect cgrect = *(CGRect *)&nsrect;
> 
> ```
> 
> CoreGraphics also provides a `CGRectMake()` function which works the same as `NSMakeRect()` (note the reversal of verb and object in the names) except it returns a `CGRect`.
> 
> 
>
> 
> In particular, I'm wondering about the position of the origin.
> 
> 
> 

That depends on where you got the rect and where you're using it. In general, Core Graphics and UIKit use flipped co-ordinates (origin upper-left, positive y going down), whereas AppKit uses unflipped co-ordinates (origin lower-left, positive y going up). But it is possible to flip or unflip co-ordinates from each API, and some classes, such as NSImage and NSView, make it very easy to do so.