레이블이 아이폰인 게시물을 표시합니다. 모든 게시물 표시
레이블이 아이폰인 게시물을 표시합니다. 모든 게시물 표시

2012년 2월 10일 금요일

iOS 셀렉터 selector


@selector
프로그램내부에서 메서드를 호출하면 컴파일 시 내부에 표현되는값으로 변경을 가해서 호출합니다.
이러한내부 표현에 해당하는 데이터 타입을 SEL타입이라고 합니다.
delegate나함수 포인터와 같은 역할을 하는 지시자입니다.
사용방법은 @selector(메서드명)으로리턴 받습니다.
매개변수가 있는 경우에는 메서드 명 뒤에 :을붙여서 사용합니다
이@selector를호출할 때는 객체가 performSelector:@selector(메서드)의형태나 SEL변수를 이용합니다.
매개변수가object인 경우에는performSelector:@selector(메서드)withObject:객체 의형태로 호출합니다.
이를적당히 이용하면 동적으로 메시지를 변경할 수 있습니다

NSDictionary


Dictionary

키와 인스턴스로 이루어진 데이터의 모임입니다
키로 인스턴스를 찾을 수 있습니다.<?xml:namespace prefix = o />
키는 유일해야 하며 일반적으로 NSString 입니다.
키와 연결된 인스턴스는 데이터 유형에 관계가 없지만 nil은 안됩니다.

1. NSDictionary
NSDictionary는 수정이 불가능한 Dictionary입니다.

멤버 메서드
+(id)dictionary
비어있는 dictionary 생성
+(id)dictionaryWithObject:(id)anObject forKey:(id)aKey
aKey를 key로 해서 anObject를 내용으로 갖는 인스턴스를 갖는 dictionary 생성
-(id)initWithObjects:(NSArray *)Objects forKeys:(NSArray *)Keys
Keys를 키 값으로 해서 Objects를 내용으로 초기화
-(id)initWithObjects:(id *)Objects forKeys:(id *)Keys count:(NSUInteger)count
Keys를 키 값으로 해서 Objects를 내용으로 count 개수 만큼 초기화
-(id)initWithObjectsAndKeys:(id)Object,(id)Key,… nil
Object와 Key로 초기화
-(NSUInteger)count
개수 리턴
-(id)objectForKey:(id)aKey
aKey에 해당하는 인스턴스 리턴
-(NSArray *)allKeys
모든 키값을 배열로 리턴
-(NSArray *)allValues
모든 키를 포함하는 배열을 리턴
-(NSEnumerator *)keyEnumerator
키 값을 열거자로 리턴
-(NSEnumerator *)objectEnumerator
키 값을 열거자로 리턴
-(NSArray *)allKeysForObject:(id)anObject
anObject를 갖는 모든 키를 배열로 리턴


NSDictionary * greeting = [[NSDictionary alloc] initWithObjectsAndKeys:@"안녕하세요", @"아침인사", @"식사 하셨어요", @"오후인사", @"내일뵐께요",@"저녁인사",nil ];
    NSLog(@"아침인사: %@", [greeting objectForKey: @"아침인사"]);
        NSLog(@"점심인사: %@", [greeting objectForKey: @"오후인사"]);
        NSLog(@"저녁인사: %@", [greeting objectForKey: @"저녁인사"]);
   
    NSArray * keys = [greeting allKeys];
    NSArray * objects = [greeting allValues];
    int i;
    for(i=0; i<[greeting count]; i++)
    {
       NSLog(@"Key:%@ Value:%@", [keys objectAtIndex:i], [objects objectAtIndex:i]);
    }    
   
    NSDictionary * greeting1 = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];
    NSEnumerator *it;
    it = [greeting1 keyEnumerator];
    id var;
    for(i=0; i<[greeting count]; i++)
    {
       var = [it nextObject];
       NSLog(@"Key:%@ Value:%@", var, [greeting objectForKey: var]);
    }

=========================================================================================
2. NSMutableDictionary
NSMutableDictionary는 수정이 가능한 Dictionary입니다.
아래와 같은 메서드가 추가됩니다.
+(id) dictionaryWithCapacity:size
size 크기만큼으로 메모리 할당
-(id)initWithCapacity:size
size 크기만큼으로 초기화
-(void)setObject:(id)anObject forKey:(id)aKey
aKey를 Key로 anObject를 추가합니다.
둘 다 nil이면 안되고 aKey가 존재한다면 내용은 대체됩니다.
-(void)removeAllObjects
모든 엔트리 삭제
-(void)removeObjectForKey:key
key에 해당하는 인스턴스 삭제
-(NSArray *)keysSortedByValueUsingSelector:@selector(비교메서드:)
이 경우 내용에 따라서 정렬한 후 key를 배열로 리턴합니다.

NSMutableDictionary *greeting = [NSMutableDictionary dictionary];
        [greeting setObject:@"안녕하세요" forKey: @"아침인사"];
        [greeting setObject:@"식사 하셨어요" forKey:@"오후인사"];
        [greeting setObject:@"내일뵐께요" forKey:@"저녁인사"];
        [greeting setObject:@"잘자요" forKey:@"밤인사"];
    [greeting setObject:@"밤새 별일 없으셨어요" forKey: @"아침인사"];
   
    NSArray * keys = [greeting allKeys];
      
    int i;
    for(i=0; i<[greeting count]; i++)
    {
       NSLog(@"Key:%@ Value:%@", [keys objectAtIndex:i], [greeting objectForKey:[keys objectAtIndex:i]]);
    }    
   
    [greeting removeObjectForKey:@"밤인사"];
    keys = [greeting allKeys];
    NSLog(@"삭제한 후 -------------");
    for(i=0; i<[greeting count]; i++)
    {
       NSLog(@"Key:%@ Value:%@", [keys objectAtIndex:i], [greeting objectForKey:[keys objectAtIndex:i]]);
    }

    keys = [greeting keysSortedByValueUsingSelector:@selector(compare:)];

    NSLog(@"내용으로 정렬 한 후 ----");
    for(i=0; i<[greeting count]; i++)
    {
       NSLog(@"Key:%@ Value:%@", [keys objectAtIndex:i], [greeting objectForKey:[keys objectAtIndex:i]]);
    }