Re: [問題] property 與 synthesize

看板MacDev作者 (←這人是超級笨蛋)時間11年前 (2013/01/22 23:56), 編輯推噓6(602)
留言8則, 4人參與, 最新討論串1/3 (看更多)
※ 引述《MisterX (" X " 先生)》之銘言:

01/22 23:30,
以前是一定要syncthesize的,現在可以不用
01/22 23:30

01/22 23:34,

01/22 23:37,
借問,現在只要加self.就不用synthesize,不加就會錯誤,要
01/22 23:37

01/22 23:37,
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

01/23 10:25, , 1F
所以@synthesize foo = _foo的意思是讓後來產生的成員變數
01/23 10:25, 1F

01/23 10:26, , 2F
_foo assign給 foo讓這兩個直保持一樣嗎?
01/23 10:26, 2F

01/23 10:33, , 3F
就是getter跟setter
01/23 10:33, 3F

01/23 10:47, , 4F
我知道@synthesize foo可以產生getter和setter
01/23 10:47, 4F

01/23 10:48, , 5F
是問foo = _foo的意義 看完上文不確定自己瞭解的是不是對
01/23 10:48, 5F

01/23 11:14, , 6F
反正我要求很低,能上架就好 XD
01/23 11:14, 6F

01/23 12:47, , 7F
A大謙虛了
01/23 12:47, 7F

01/24 22:36, , 8F
感謝解釋~受教了
01/24 22:36, 8F
文章代碼(AID): #1G_hQYio (MacDev)
文章代碼(AID): #1G_hQYio (MacDev)