iPhoneアプリ開発の虎の巻
HOME > NSValue

NSValue

CGRectやNSRangeなど、NSObjectを継承していない構造体をオブジェクトとして扱いたい場合に使用します。
例えば、CGRectなどの構造体はNSObjectを継承していないため、そのままではNSArrayなどに追加できませんが、NSValue型に変換すれば追加することができるようになります。

NSValueのクラス階層

NSObject ↑ NSValue

NSValue生成

//CGRectのNSValueを生成する例
CGRect rect = CGRectMake(0, 0, 100, 100);
NSValue *val = [NSValue valueWithCGRect:rect];

//CGPointのNSValueを生成する例
CGPoint point = CGPointMake(100, 100);
NSValue *val = [NSValue valueWithCGPoint:point];

//CGSizeのNSValueを生成する例
CGSize size = CGSizeMake(100, 100);
NSValue *val = [NSValue valueWithCGSize:size];

//NSRangeのNSValueを生成する例
NSRange range = NSMakeRange(0, 50);
NSValue *val = [NSValue valueWithRange:range];

NSValueのメソッド

【NSValueの主要メソッド】
メソッド名 説明
-(CGRect)CGRectValue NSValueをCGRectとして取得する
(例)CGRect r = [val CGRectValue];
-(CGPoint)CGPointValue NSValueをCGPointとして取得する
(例)CGPoint p = [val CGPointValue];
-(CGSize)CGSizeValue NSValueをCGSizeとして取得する
(例)CGSize s = [val CGSizeValue];

主要なメソッドのみ掲載しています。
 上記「NSValueのクラス階層」にあるクラスのメソッドも使用できます。

NSValue例文

// CGSize構造体をNSArrayに入れる
NSValue *val1 = [NSValue valueWithCGSize:CGSizeMake(10, 10)];
NSValue *val2 = [NSValue valueWithCGSize:CGSizeMake(20, 20)];
NSValue *val3 = [NSValue valueWithCGSize:CGSizeMake(30, 30)];
NSValue *val4 = [NSValue valueWithCGSize:CGSizeMake(40, 40)];
NSValue *val5 = [NSValue valueWithCGSize:CGSizeMake(50, 50)];

NSArray *ar = [NSArray arrayWithObjects:val1, val2, val3, val4, val5, nil];

 上記 ar からCGSizeを取り出すサンプルです。
//3番目のCGSizeを取り出す
NSValue *value = [list objectAtIndex:2];
CGSize sz = [value CGSizeValue];
totop