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修饰的属性,产生了新对象,二者指向不同的地址,改变一个并不会影响另外一个。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容