例子: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:深拷貝,堆的位置不同,棧的位置也不同。