본문 바로가기

Dev/Objective-C

NSValue에 대한 간단한 설명 및 사용법 (add cgpoint to array)

흔히 기본자료형(자주쓰이는 CGPoint,CGRect 등)들을 NSArray,Dictionary등에 쓸려면 객체화를 해주어서 담아야 하는데 그러한 과정을 래핑(Wrapping)이라고 하나보다. 그와 관련하여 짧으면서도 핵심을 짚어준 포스트가 있어 소개합니다.


1. IPhone어플 개발노트 - Premitive Wrapping : NSValue, NSNumber - by.mskyt's tistory



배열과 딕셔너리를 활용한 구조를 설계하는 도중에 CGPoint를 배열에 넣을수 있는 방법을 찾던중, NSValue에 대하여 알게 되었습니다.


평소 NSNumber을 래핑하여 배열에 넣어본적은 있었지만, NSValue의 존재를 모르고 있어서 시도해보지 못했네요.


NSValue *nv = [NSValue valueWithCGPoint:ccp(10,20)]; NSLog(@"nv : %@",nv); NSLog(@"nv : %f,%f",[nv CGPointValue].x,[nv CGPointValue].y); NSArray *ary1 = [NSArray arrayWithObject:nv]; //= NSArray *ary1 = [NSArray arrayWithObject:[NSValue valueWithCGPoint:ccp(10,20)]]; //= NSArray *ary1 = @[[NSValue valueWithCGPoint:ccp(10,20)]]; XCode4.4(LLVM4.0)부터 추가된 리터널 표기법에 따르면 간략하게 표현가능 NSLog(@"ary1 : %f,%f",[ary1[0] CGPointValue].x,[ary1[0] CGPointValue].y);

위처럼 값들이 잘 들어갑니다. 찾아보기로는 CGRect를 비롯한 다양한 구조체도 래핑하여 사용할수 있다고 하는데, 아직은 그 단계가 아니라서 해보지 않았읍니다. 크크.. 


기존 CGPoint와는 문법이 조금 다른데 꼭 ! '[nv CGPointValue]'와 같은 형태로 사용하시기 바랍니다.