为什么在目标c NSString作为值类型?

时间:2015-11-29 08:18:25

标签: objective-c

为什么在目标c NSString作为值类型?当我写代码时

NSString *s1 = [NSString stringWithFormat:@"1"]; //;
NSString *s2 = s1;
s1 = @"7";

NSLog(@"s1 = %@", s1);
NSLog(@"s2 = %@", s2);

结果是

s1 = 7
s2 = 1

为什么?

但是当我上课时

@interface MyObject : NSObject

@property(nonatomic,nonnull,retain) NSString *string;

@end

MyObject *o1 = [[MyObject alloc]init];
    o1.string = @"1";
    MyObject *o2 = o1;
    o1.string = @"7";

    NSLog(@"01 = %@", o1.string);
    NSLog(@"02 = %@", o2.string);

结果是

01 = 7
02 = 7

1 个答案:

答案 0 :(得分:0)

它不作为值类型。

第二行会导致s2指向与s1指向的那个时刻相同的内存位置。然后,您将s1更改为指向其他位置是完全不相关的。