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