我有这个例子
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”?
答案 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;。