天天看點

黑馬程式員——【OC】點文法以及成員變量的作用域

------- android教育訓練、java教育訓練、IOS教育訓練期待與您交流! ----------

一、OC點文法簡述:

1>首先點文法本質上是方法的調用,不同于其他語言 如 JAVA 中 一個對象後面“點”就可以通路對象的變量屬性,在OC中是不可以的。

2>當使用點文法時,我們的編譯器會自動展開相應的方法。

如下例子:

Person *p = [Person new];

p.age = 12;  //  這條語句中其實調用了我們的set方法    寫法等同于:[p SetAge:12];

int a = p.age; //這條語句中其實調用了我們的get方法    寫法等同于:[p age];

3>大家可以從上述例子中看到點文法其實在我們程式設計過程中使代碼精簡了不少同時友善使用,但是注意如果使用不當會給程式造成死循環。

死循環例子:

- (void) SetAge: (int) age

{

self.age = age; 

}

 這裡我們是要修改我們的成員變量的值,往常我們會采用語句:_age = age;

但這裡我們使用了self.age = age; 我們來分析一下這條語句到底可不可以。首先self.age 用到了self關鍵字:是指向調用目前方法的對象,是以self.age是調用目前對象的age方法,這一句一旦執行就一直調用我的age方法(即set方法),重複執行造成程式陷入死循環中,是以使用點文法時一定要慎用,注意使用場合。 

二、成員變量的作用域

OC方法中成員變量的作用域類型分為四種:

1> @private  中文意思為私人的、私有的,所有它隻能在目前類的實作@implementation中直接通路。

      @protected  中文意思為受保護的,是以它可以在目前類以及子類的實作@implementation中直接通路。

      @public  中文意思為公共的,是以它可以在任何地方都可以直接通路。

      @package 中文意思為包、架構,是以同意它在同一個體系内(架構)中可以通路,介于@private和@public之間。

2> 一般情況下都會在我們類的聲明中定義成員變量,但是這裡我們需要注意:在@implementation中也可以定義成員變量,但成員變量類型預設為private。

3> 在類的聲明和實作中定義成員變量時,注意不能有相同的成員變量名。

4> 作用域其實挺好了解,感覺也沒什麼難度,但是我們在項目開發過程中應該合理的定義成員變量以便更符合我們的業務要求和安全性。