→ mickfang:我比較想知道後面用copy, retain, assign的差別跟用法 08/13 04:47
→ mickfang:還有其他的關鍵字可以使用嗎?謝謝回答 08/13 04:47
@property(attributes) type name;
attributre:
read read only (只產生 getter)
write write only
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
推 aecho:我覺得atomic才是用有多工,nonatomic是為了效率才用的。 08/13 09:10
→ aecho:atomic會比nonatomic費時一點~~ 08/13 09:10
→ uranusjr:呃, 可能是我寫得不好, 我的意思是那個設定是在多工程式 08/13 09:42
→ uranusjr:上才有差, 如果確定不是多工就可以考慮加 unatomic 08/13 09:43