잊지 않겠습니다.

출처 : http://dmindproject.com/blog/?p=280
 

- 잘못된 방법 ( X )

-(void)swapA:(NSString *)str1 andB:(NSString *)str2
{
    NSString *temp = str1;
    str1 = str2;
    str2 = temp;
}
NSString *str1 = @"11111";
NSString *str2 = @"22222";

NSLog(@"%@, %@", str1, str2);     //11111, 22222
[self swapA:str1 andB:str2];
NSLog(@"%@, %@", str1, str2);     //11111, 22222

-올바른 방법 ( O )

-(void)swapAA:(NSString **)str1 andBB:(NSString **)str2
{
    NSString *temp = *str1;
    *str1 = *str2;
    *str2 = temp;
}
NSString *str1 = @"11111";
NSString *str2 = @"22222";

NSLog(@"%@, %@", str1, str2);     //11111, 22222
[self swapAA:&str1 andBB:&str2];
NSLog(@"%@, %@", str1, str2);     //22222, 11111

올바른 swap함수를 구현하기 위해서는 포인터가 가르키는 value값을 넘기면 안되고
포인터 value의 주소값(&포인터이름)을 넘겨야 한다.
따라서 swap함수의 매개변수는 포인터의 주소값을 저장하는 **(double pointer) 형태가 된다.

Posted by Y2K
,