看板 MacDev 關於我們 聯絡資訊
※ 引述《MisterX (" X " 先生)》之銘言:
johnlinvc:以前是一定要syncthesize的,現在可以不用 01/22 23:30
phinix0531:http://goo.gl/vvM0I 01/22 23:34
kiii210:借問,現在只要加self.就不用synthesize,不加就會錯誤,要 01/22 23:37
kiii210:synthesize,這是因為...? 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
MisterX:所以@synthesize foo = _foo的意思是讓後來產生的成員變數 01/23 10:25
MisterX:_foo assign給 foo讓這兩個直保持一樣嗎? 01/23 10:26
tentenlee:就是getter跟setter 01/23 10:33
MisterX:我知道@synthesize foo可以產生getter和setter 01/23 10:47
MisterX:是問foo = _foo的意義 看完上文不確定自己瞭解的是不是對 01/23 10:48
Adonisy:反正我要求很低,能上架就好 XD 01/23 11:14
MisterX:A大謙虛了 01/23 12:47
kiii210:感謝解釋~受教了 01/24 22:36