不可变的NSString

时间:2014-06-16 23:01:52

标签: ios objective-c

我有这个例子

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 }
    }
    }

我知道NSString是不可变的,我不能修改它们的内容(“Alice”),但我可以改变NSString指向的位置(name = nameBob)。 为什么最后一个NSLog不打印“Bob”?

1 个答案:

答案 0 :(得分:4)

Name是指向字符串的指针。

p.name是另一个指向字符串的指针。

首先,您将名称设置为指向字符串@&#34; Alice&#34;

然后将p.name设置为指向相同的字符串,&#34; Alice&#34;。您没有将p.name设置为指向name,而是将其设置为指向名称所指向的同一地址。 (字符串&#34; Alice&#34;)

然后你将name设置为指向另一个字符串,&#34; Bob&#34;。

p.name变量仍然指向第一个字符串,&#34; Alice&#34;。