OC 封裝

首先介紹一下設置實例變量(setter)方法和訪問實例變量(getter)的方法 ,那麼問題來了,set和get方法的做用是什麼呢?這裏不得不提到一個概念『封裝』。安全

咱們以前使用類屬性時,都會在花括號的裏面加上一個 @public 。也就是說這類的屬性是公開的,這時誰均可以對它進行修改,當一個類把它的屬性暴露給外部的時候,那麼該類就失去了對屬性的控制權。對象

在OC語言中,使用@interface和@implementation來處理類。接口

就比如一款網遊(具體過程複雜的多,只是舉例加深理解),你看到的界面,進行的操做(如攻擊,補充體力等等)都是你能夠調用的方法,那麼這些方法的名稱的聲明就是在@interface中開發

而你在執行操做時,程序把你的命令實現並展示在你眼前的這個過程,你是看不到的,而這就是@implementation裏進行的get

@interface就好像暴露在外面的時鐘表面,向外界提供展現以及接口。io

(類的屬性在不聲明的狀況下默認都是@private:也就是私人的,在其餘類中是沒法調用的)變量

@implementation就好像隱藏在時鐘內部的構造實現,把具體的實現封裝了起來。原理

封裝的原理就是: 讓實例變量默認只能被類的對象方法所調用.程序

介紹了封裝的做用和原理,咱們回到set get方法,介紹一下set和get 方法的使用方法

在前面提到爲了安全性考慮,咱們通常不會在成員變量名前面使用 @public@@protected等關鍵字修飾 ,而是用set方法來爲對象提供成員的值,set內部也能夠對一些不合理是數據進行篩選。

set方法的做用是:爲外界提供一個設置成員變量的方法。

那麼咱們不由要想,既然封裝是要讓實例變量默認只能被對象方法調用,那麼爲何咱們還要一個可讓外界設置成員變量的方法呢?能夠思考一下。

這裏要注意幾點:

*方法名必須以set開頭

*set跟的成員變量名稱開頭首字母必須大寫

*返回值必定是void

*必定要接受一個參數,並且成員變量和參數名一致

*形參名不能和成員變量名同樣,蘋果官方推薦成員變量名加_來進行區分,因此咱們能夠發現全局變量一般聲明是都會加上一個下劃線。

set的方法的好處是

*不讓數據暴露在外,確保了數據的安全性

*對設置的數據進行過濾

set方法的實現

接下來介紹get方法

它的做用:爲調用者返回對象內部的成員變量

 

get方法的聲明中要注意的幾點

*方法名與成員變量名一致

*返回值類型與成員變量類型一致

*不須要接受任何參數

而後實現它

在實際開發中,不必定set和get方法都會同時出現,若是咱們只容許用戶讀取成員變量,可是不容許修改時,咱們能夠只提供get方法,而不提供set方法

並且成員變量名的命名如下劃線開頭,get方法名不須要帶下劃線,使用下劃線開頭有兩個好處:

*與get方法的方法名區分開來

*能夠和一些其餘的局部變量區分開來,下劃線開頭的變量,一般都是類的成員變量。 

相關文章
相關標籤/搜索