2014-06-16 2 views
0

가 내가있는 NSString 불변 알고이 예Inmutable있는 NSString

import <Foundation/Foundation.h> 
@interface Person : NSObject 
@property (nonatomic,strong) NSString *name; 
@end 
@implementation Person 
@end 
int main(int argc, char *argv[]) { 
    @autoreleasepool { 
     Person *p = [Person new]; 
     NSString *name = @"Alice"; 

     p.name = name; 
     NSLog(@"%@",p.name); // prints Alice 

     NSString *nameBob = @"Bob"; 

     name = nameBob; 
     NSLog(@"%@",p.name); // prints Alice } 
    } 
    } 

이, (이름 = nameBob) 나는 그 내용 ("앨리스")를 수정할 수는 없지만,있는 NSString가 가리키는 어디 변경할 수 있습니다. 마지막 NSLog가 "Bob"을 인쇄하지 않는 이유는 무엇입니까?

+0

'name'을 변경했지만'p.name'을 (를) 기록하기 때문에. – rmaddy

+0

그들은 2 개의 다른 포인터입니다. 'name' 포인터의 방향을 바꾸지 않으면'name' 포인터가 여러분의 사람에게 방향을 바꾼다. – CrimsonChris

+1

이 언어는 예상대로 작동합니까? – CrimsonChris

답변

4

이름은 문자열에 대한 포인터입니다.

p.name은 문자열에 대한 또 다른 포인터입니다.

는 먼저 문자열로 지점 이름을 설정 @ "앨리스"를

그런 다음 같은 문자열, "앨리스"를 가리 키도록 p.name을 설정합니다. 이름을 가리 키도록 p.name을 설정하지 않고 이름이 가리키는 것과 동일한 주소를 가리 키도록 설정합니다. ("Alice"문자열)

그런 다음 나중에 다른 문자열 "Bob"을 가리 키도록 이름을 설정합니다.

p.name 변수가 여전히 주먹 문자열 "Alice"를 가리키고 있습니다.