objc_setAssociatedObject ( Associative references ) 사용하기
2012. 8. 21. 21:08ㆍiOS
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
오랜만에 남기네요 ..
요즘들어 코딩하면서 자주 사용하는 Associative references 를 이야기 해볼려고 합니다
자세한 설명은
http://lambert.tistory.com/m/post/view/id/559
에서 참고하시면 더욱 도움 되실것입니다 .
associative reference를 잘 활용하면 아주 쓸만하다.
단 associative reference 는 주소 기반인점을 기억하면서 예제로 설명하겠다
[self drawTouchArea:CGRectMake(0, 0, 0, 0) data:@"샘플"]; #pragma mark 버튼 터치 영역을 만든다 -(void) drawTouchArea: ( CGRect ) rect data: ( id ) data { UIButton *tArea = [ UIButton buttonWithType:UIButtonTypeCustom]; tArea.frame = rect; tArea.backgroundColor = [UIColor clearColor]; [self addSubview:tArea]; objc_setAssociatedObject ( tArea, "value", data, OBJC_ASSOCIATION_RETAIN); [tArea addTarget:delegate action:@selector(gotoDetailView:) forControlEvents:UIControlEventTouchUpInside]; }
-(void) gotoDetailView : ( UIButton * ) sender { id data = objc_getAssociatedObject(sender, "value"); NSLog(@" data ] %@", data ); }
위의 예제에서 보면 우리가 흔히 쓰는 addTarget 를 통해 UIbutton 에 이벤트를 정하는것입니다
그러나 런타임 함수인 objc_setAssociatedObject 를 통해 클래스 오브젝트 ( UIbutton ) 에 임의의 변수를 저장하였다 .
즉 핸들러를 통해서 받은 UIbutton 오브젝트 안에 임의로 넣은 변수값이 있다는것이다
마지막
NSLog(@"[ data ] %@", data );
에는 "샘플"이 찍히게 된다.
자세한 설명은 위의 링크를 통해서 다시한번 이해하시길 바랍니다
p.s
associative reference 는 런타임 함수이기 떄문에
#import <objc/runtime.h>
를 임포트 해야만한다
'iOS' 카테고리의 다른 글
xcode 4.5 / ios6 jsonkit warring 문제 (3) | 2012.09.20 |
---|---|
CrashLog Report 관리하기 (Mail / Php) (3) | 2012.09.13 |
[잡글] 뉴 아이패드 레티나의 무서운 위엄... (0) | 2012.03.10 |
XCode 개발 인증서( WWDR/Distribution/Developer ) 내보내기 하여 사용할때 주의점 (2) | 2012.02.01 |
typedef enum (1) | 2012.01.17 |