NSArray,NSDictionaryは値が固定

RubyでいうところのArrayとHashはObjective-CだとNSArrayとNSDictionaryになるのかなと思っていたんだけどこの2つって生成時指定した値から変化がないときに使う物なんだな。
値の追加とか削除とかしたい場合にはそれぞれNSMutableArray,NSMutableDictionaryという可変な値を扱えるサブクラスを使うみたい。

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と同じようにしてあげる必要があります。