作者uranusjr (←这人是超级笨蛋)
看板MacDev
标题Re: [问题] 请问Objective-C中property的问题
时间Thu Aug 13 08:31:03 2009
※ 引述《cheech (两光勘吉)》之铭言:
1F:→ mickfang:我比较想知道後面用copy, retain, assign的差别跟用法 08/13 04:47
2F:→ mickfang:还有其他的关键字可以使用吗?谢谢回答 08/13 04:47
@property(attributes) type name;
attributre:
readonly read only (只产生 getter)
readwrite 产生 getter 和 setter
assign 在 setter 中简单替换新旧变数
retain 在 setter 中 retain 新变数, release 旧变数
copy 在 setter 中 copy 新变数, release 旧变数
对於後三个, 如果你有用 garbage collector 那前两者无差
如果没有, 那第一个适用於实体变数(如 int), 它的 setter method 如
- (void)setFoo:(int)bar
{
foo = bar;
}
第二个适用於 pointer, 长得类似
- (void)setFoo:(NSString *)bar
{
[bar retain];
[foo release];
foo = bar;
}
第三个只是把第二个的 retain 改成 copy
同样是用在 pointer types, 但不是直接 retain 新变数, 而是把它 copy 一份
这通常是因为新变数可能是 mutable types, copy 可以让它们变成 immutable
另一个可以用的 attribute 是 nonatomic 和, 用在多工程式上
如果不写明预设会建立 atomic setter methods
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.72.123
3F:推 aecho:我觉得atomic才是用有多工,nonatomic是为了效率才用的。 08/13 09:10
4F:→ aecho:atomic会比nonatomic费时一点~~ 08/13 09:10
5F:→ uranusjr:呃, 可能是我写得不好, 我的意思是那个设定是在多工程式 08/13 09:42
6F:→ uranusjr:上才有差, 如果确定不是多工就可以考虑加 unatomic 08/13 09:43
※ 编辑: uranusjr 来自: 220.135.72.123 (08/13 23:50)
7F:推 hata1234:好文.最近在刚好在记忆体管理上坎坎坷坷.= =; 08/14 10:21
8F:→ hata1234:不过...nonatomic跟unatomic有什麽不同啊. 08/14 10:21