例子:NSString* house = [[NSString alloc] initWithString:"尼玛的房子"];
以上代码会产生:
1、在堆上分配一段内存来存储@“尼玛的房子”。内存地址为:0X1111,内容为:“尼玛的房子”
2、在栈上分配一段内存来存储house。地址为:0XAAAA,内容为0X1111
1、assign:NSString* myhouse = [house assign];
此时myhouse和house完全形同,地址都是0XAAAA,内容为0X1111、指向堆上的值
myhouse就好比是house的别名,
2、retain:NSString* myhouse = [house assign];
此时的myhouse的地址不为0XAAAA了 可能为0XAABB 但是内容还是0X1111,所以两个都可以管理“尼玛的房子”
3、copy:copy 的情况就是在堆上又开辟了一段内存,内存什么的都变化了。
简单的说:
1、assign好比是引用,别名!
2、retain就好比是在栈中的地址不同,但是内容相同。
3、copy:深拷贝,堆的位置不同,栈的位置也不同。