NSArray,NSDictionaryに格納する値はオブジェクトでなければならない

今回はCGPointをNSMutableDictionaryに格納しようとして悩んでおりました。
NSArray,NSDictionaryに格納できる値はNSObjectのサブクラスである必要があるそうなのです。
CGPointやCGRect等の構造体はNSObjectのサブクラスではない為そのまま格納はできないようなのです。
そのため格納する際はNSValueを使って格納して取り出す際にCGPoint等の辺りにキャストして使うみたいです。
NSValueはNSObjectのサブクラスではない構造体をオブジェクトとして扱いたい時に使うらしいです。

CGPoint point = CGPointMake(200, 300);
// NSValueに変換
NSValue *point_value = [NSValue valueWithCGPoint:point];

//CGPointを取得
CGPoint pointdayo = [point_value CGPointValue];

また、上記以外にもプリミティブ型と言われる型もオブジェクトではないのでNSNumberを使ってNSValueと同じようにしてあげる必要があります。