NSString的属性使用strong还是copy修饰

我们先看看NSString和NSMutableString的的继承结构:

NSMutableString->NSString->NSObject

由上边的继承机构可以知道NSString是继承于NSObject的,因此,可以明确的一点是NSString是对象。

现在回到到底用strong还是copy来修饰:

#import@interface Person : NSObject

@property (nonatomic,copy) NSString *nickName;

@property (nonatomic,strong) NSString *name;

@end

#import "ViewController.h"

#import "Person.h"

@interface ViewController ()

@property (nonatomic,copy) NSString *heap_a;///堆区的a

@property (nonatomic,copy) NSString *heap_b;///堆区的b

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

NSMutableString *str = [NSMutableString stringWithString:@"frank"];

Person *p1 = [[Person alloc] init];

p1.name = str;

p1.nickName = str;

[str appendString:@"baby"];

NSLog(@"%@",p1.name);

NSLog(@"%@",p1.nickName);

}


结果

为什么会出现上边的结果呢?

把可变的字符串赋给strong修饰的属性,没有产生新对象,二者指向同一个地址。

把可变的字符串赋值给copy修饰的属性,产生了新对象,二者指向不同的地址,改变一个并不会影响另外一个。

你可能感兴趣的:(NSString的属性使用strong还是copy修饰)