我有點不同意@Dietrich繪製這樣一個強硬的路線。利用屬性獲取器和設置器是非常有效的,並提供額外的東西作爲一個好處,例如對關鍵值編碼的自動支持,但是他們也有做額外的東西的缺點。作爲一種實踐,沒有外部對象應該直接訪問對象成員變量,但是您可以控制和選擇是否直接訪問和設置類中的成員變量。
PROS直接訪問:
1)速度更快 - 它可能看起來並不多,但每次使用的方法,而不是直接時候訪問您蒙受功能開銷的變量 - 在一個循環做到這一點,成本不是微不足道的。
2)明確的 - 你知道,當你設置用於直接訪問的變量
缺點究竟是什麼改變:
1)的getter和setter多態性的損失 - 直接你失去訪問變量子類可以擴展那些吸取器和設置器的功能,這從OOP角度來看可能是不可取的(但是再一次,這也可能是一個好處,取決於你的架構)
2)KVO損失(或至少使它更難) - 關鍵的價值觀可以是綁定changin的非常酷的方式g的成員變量值添加到方法回調中以引發某種事件驅動的更改(主要是將屬性綁定到UI佈局/顯示等)。KVO並不適合每個人。
3)失去自動同步(當聲明爲原子時) - 有時你需要你的成員變量是線程安全的。這是消除鍋爐板代碼的主要優點。
最終,這取決於您作爲開發人員。實際上,我傾向於直接向成員變量訪問,除了當我構建一個線程安全的對象或對擴展和KVO具有體系結構健壯性時。
希望這可以幫助,選擇是你的! :)
檢查了這一點http://stackoverflow.com/questions/6112283/question-about-synthesize – Kamarshad