我对objective-c的内存管理有一些疑问,
比方说:
NSString * test= [[NSString alloc] init ]
test=@"msg";
[object setStr1: test ]; // declared as: @property(copy, readwrite)
[object setStr2: test ]; // declared as: @property(retain, readwrite)
[object setStr3: test ]; // declared as: @property(assign, readwrite)
test=@"some other string"
我认为str1
会有一个test
s 内容的副本:str1
将指向包含 的内存(堆)的一个地址msg
,该地址与 所指向的地址不同test
。对?
关于str2:
1.它存储什么?,我猜指向的地址相同test
,但它会将引用计数器test
增加到2。2
.当我更改测试的内容时,str2有什么?我想它仍然指向msg
关于str3:这是不正确的,对吧?,有什么作用assign
?
谢谢。
奖金问题:
NSString * test= [[NSString alloc] init ]
test=@"msg";
test=@"something";
我应该在更改其内容之前发布测试吗?