'과제B.4'에 해당되는 글 1건

  1. 2010.06.22 과제B.4 - Selector 의 이용과 클래스 정보 보기
아이폰어플개발정보2010. 6. 22. 17:53
과제B.4 - Selector 의 이용과 클래스 정보 보기

[과제B Section 4] Selector 의 이용과 클래스 정보 보기


지금까지 만들어봤던 NSString, NSURL, NSProcessInfo, NSDictionary 등과 NSMutableString을 인스턴스화해서
배열(NSMutableArray)에 넣어라.


그리고 아래를 수행하라.


1. 오브젝트의 클래스명을 출력하라
2. 오브젝트가 NSString 클래스인지 출력하라
3. 오브젝트가 NSString의 서브클래스인지 출력하라
4. 오브젝트가 "lowercaseString"를 지원하는지 출력하라
5. "lowercaseString"를 지원하는 오브젝트라면 performSelector:를 이용하여 결과를 출력하라


<예상하는 결과 형식>

2008-01-10 20:56:03 WhatATool[360] Class name: NSCFString
2008-01-10 20:56:03 WhatATool[360] Is Member of NSString: NO
2008-01-10 20:56:03 WhatATool[360] Is Kind of NSString: YES
2008-01-10 20:56:03 WhatATool[360] Responds to lowercaseString: YES
2008-01-10 20:56:03 WhatATool[360] lowercaseString is: hello world!
2008-01-10 20:56:03 WhatATool[360] ======================================
2008-01-10 20:56:03 WhatATool[360] Class name: NSURL
2008-01-10 20:56:03 WhatATool[360] Is Member of NSString: NO
2008-01-10 20:56:03 WhatATool[360] Is Kind of NSString: NO
2008-01-10 20:56:03 WhatATool[360] Responds to lowercaseString: NO
2008-01-10 20:56:03 WhatATool[360] ======================================
2008-01-10 20:56:03 WhatATool[360] Class name: NSCFDictionary
2008-01-10 20:56:03 WhatATool[360] Is Member of NSString: NO
2008-01-10 20:56:03 WhatATool[360] Is Kind of NSString: NO
2008-01-10 20:56:03 WhatATool[360] Responds to lowercaseString: NO
2008-01-10 20:56:03 WhatATool[360] ======================================


<힌트>
아마도 NSString과 같은 클래스 명이 예상치 않은 결과가 나올수 있지만
그건 implementation의 문제이니 여기선 그냥 넘어가도록 한다.


<실습>
NSString, NSURL, NSProcessInfo, NSDictionary, NSMutableString을 만든다.


NSString *myString = @"Hello World!";
NSURL *myURL = [NSURL URLWithString:@"
http://www.stanford.edu"];
NSProcessInfo *myProcess = [NSProcessInfo processInfo];
NSDictionary *myDictionary = [NSDictionary dictionary];
NSMutableString *myMutableString = @"This is a mutable string object";


NSMutableArray를 만들고 위의 오브젝트들을 추가한다.


NSMutableArray *array = [NSMutableArray array];
[array addObject:myString];
[array addObject:myURL];
[array addObject:myProcess];
[array addObject:myDictionary];
[array addObject:myMutableString];


루프를 돌며 클래스 정보를 출력한다.


■ 오브젝트의 클래스명을 출력하라


모든 오브젝트는 NSObject를 계승하니까... NSObject reference를 찾아보자.

- (NSString *)description 이라고 하니까, 클래스 설명이 나와버린다.

구글 검색을 해보니까 className을 쓰면 된다고 한다.

[obj className];

왜 NSObject의 리퍼런스에 나와있지 않은지 모르겠지만 아마도 다른 연관이 있는듯. 일단 나오니까 스킵.


 오브젝트가 NSString 클래스인지 출력하라
- (BOOL)isMemberOfClass:(Class)aClass 이용


오브젝트가 NSString의 서브클래스인지 출력하라
- (BOOL)isKindOfClass:(Class)aClass 이용


오브젝트가 "lowercaseString"를 지원하는지 출력하라
- (BOOL)respondsToSelector:(SEL)aSelector 이용


"lowercaseString"를 지원하는 오브젝트라면 performSelector:를 이용하여 결과를 출력하라
- (id)performSelector:(SEL)aSelector 이용

Selector 란 컴파일된 오브젝트의 메소드를 가르키는 이름이라고 한다.

즉, performSelector: 같은 메소드에 Selector를 지정함으로써 실행할수 있다는 뜻이다.

<결과>

성공!!!



출처 : http://blog.naver.com/PostView.nhn?blogId=katchup00&logNo=10075791909
Posted by 오늘마감

댓글을 달아 주세요