Re: [問題] property 與 synthesize
※ 引述《MisterX (" X " 先生)》之銘言:
推
01/22 23:30,
01/22 23:30
推
01/22 23:34,
01/22 23:34
→
01/22 23:37,
01/22 23:37
→
01/22 23:37,
01/22 23:37
Rules of thumb:
1) 要嘛就完全不要用 @synthesize, 要嘛使用 @synthesize foo = _foo 慣例
2) 除非有正當理由, 否則不要使用 synthesize 產生的成員變數
請永遠使用 getter/setter
所以請避免 @synthesize foo 這種寫法
而且請一律使用 self.foo 存取你的 properties, 不要用 foo 或 _foo
除非你有正當理由
====
以下詳解
自動合成會產生以下的成員變數/函式:
Getter
Setter (如果不是 readonly)
名稱以底線開頭的成員變數 (如果不是 readonly)
例如
@property (nonatomic) id foo;
會產生
- (id)foo
- (void)setFoo
以及一個 id 成員變數 _foo
所以你用 foo 沒有辦法存取, 因為不存在這個變數
正確的成員變數名稱為 _foo
前面推薦使用 @synthesize foo = _foo 的原因有兩個
第一是這是蘋果現在的慣例
第二是不會與 getter 甚至函式內的區域變數搞混(應該也是蘋果改採此慣例的原因)
self.foo 代表呼叫 getter/setter, 與 [self foo] 或 [self setFoo:bar] 語意相同
而 _foo(或者 foo)則是直接存取變數內容, 不會經過 getter(或 setter)
應該不需要說明為什麼要推薦使用 setter/getter, 而非直接存取成員變數吧
順帶一題, 是 Objective-C
--
╱ ̄ ̄ ̄╲
▏◢█◣ ▏
︻█︻█ ▏ 成龍表示: 是喔...
′/ ‵ ▏
╰╯ █╱
ψQSWEET ◥︶█◤
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
推
01/23 10:25, , 1F
01/23 10:25, 1F
→
01/23 10:26, , 2F
01/23 10:26, 2F
推
01/23 10:33, , 3F
01/23 10:33, 3F
推
01/23 10:47, , 4F
01/23 10:47, 4F
→
01/23 10:48, , 5F
01/23 10:48, 5F
推
01/23 11:14, , 6F
01/23 11:14, 6F
推
01/23 12:47, , 7F
01/23 12:47, 7F
推
01/24 22:36, , 8F
01/24 22:36, 8F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 3 篇):