iOS開發-OC語言 (六)點文法和@property,-oc@property

來源:互聯網
上載者:User

iOS開發-OC語言 (六)點文法和@property,-oc@property

點文法和@property

 

知識點

 

1.setter/getter函數

2.點文法

3.@property文法和屬性

 

 

========================================

一、setter和getter函數 

  1.setter和getter函數的作用

setter  方法:   修改對象的欄位/執行個體變數

getter 方法:   讀取對象的欄位/執行個體變數

 

setter 方法: 可以帶有多個參數,可以同時給多個變數賦值

 

getter方法: 不帶參數,只能返回一個變數的值。

 

 

 

2.setter和getter如何命名

  setter 方法的命名:

xxx: 表示的是成員變數的名字

 

//帶有一個參數

- (void)setXxx:(參數類型)參數1;

//帶有多個參數

- (void)setXxx:(參數類型)變數名字  xxx:(參數類型)變數名字 ……;

 

 

getter 方法的命名:

- (傳回值類型)xxx;

 

 

=======================================

二、點文法   為了讓程式設計簡單化

隱藏了記憶體管理細節

隱藏了多線程、同步、加鎖

 

 

2.點文法的作用

屬性可以在不適用 【對象 方法名字】 的情況下使用點文法

無需調用[foo value] 可以調用foo.value 來訪問. 注意跟結構體的區別

雖然foo.value 看起來像是直接存取value變數,但是屬性始終調用

方法,而這些方法又可以訪問對象的資料。

 

 

3.點文法的調用

     //一個參數的set方法可以使用點文法賦值

    [xiaoxin setName:@“小新”];

    //這不是使用成員變數,是使用set方法

    xiaoxin.name = @"小新";

    //可以通過.文法調用get方法

    NSString * ret = [xiaoxin name];

    //xiaoxin.name在等號左邊就是set方法,使用這個運算式的值,就是get方法

    ret = xiaoxin.name;

    

【注】點文法只是訪問setter getter方法,不是使用成員變數。

 

4.點文法和setter/getter函數的關係

 

 

【點文法和[]寫法】本質一樣,同樣是發送set和get訊息,只不過寫法不同。

         

  dog.name = @“xiaobai”;

展開成: [dog setName: @“xiaobai”];

 

 

      NSString *nameString = dog.name;

展開成: NSString *nameString = [dog  name];

          

=======================================

三、屬性(@property)和合成(@synthesize)

 

1.當一個類中的成員變數非常多的時候,setter和getter是否會顯得非常臃腫,@property和@synthesize可以使代碼變得簡潔。

 

2.@property用處

  1) 讓編譯器自動聲明setter和getter

  

3.@property使用

  1)  @property 成員變數類型  變數名;

 

 

4.@synthesize用處

  1)讓編譯器自動實現setter和getter函數 

 

 

5.@synthesize可以省略(Xcode4.6以後可以省略)

   //聲明一個屬性,相當於聲明了下面兩個方法

   @property NSString * name;

   //- (void)setName:(NSString *)name;

   //- (NSString *)name;

 

    @synthesize name = _name;

    //Xcode4.6以前,需要這樣實現,如同實現了下面兩個方法

    //Xcode4.6起,無需寫@synthesize,自動實現下面兩個方法,會自動關聯名位_XXX的變數

    //如果類中並沒有對應的變數,會自動產生相應的變數。

 

 ======================================

@property屬性

 

1.原子操作

  atomic(預設)/nonatomic

 

 

 

2. assign  直接賦值修飾符(預設),一般用在基本類型。

           

        //預設(預設)修飾符

        @property (assign) NSString * name;

         //同時產生set、get方法

 

      直接賦值,展開的set方法:

     - (void)setName:(NSString *)name

     {

        _name = name;

     }

 

3.讀寫操作

  readonly/readwrite(預設)

//唯讀修飾符

   //只產生getter,沒有setter

    @property (readonly) NSUInteger age;

    

 

    /預設修飾符

    //同時產生set、get方法

    @property (readwrite) NSString *name;

   

 

 

 

4. 給set方法和get方法起別名

//getter修飾符

   //給get方法起別名

    @property (getter = myWeight) NSUInteger weight;

 

 

   //setter修飾符

   //給set方法起別名

   @property (setter = setLife:) BOOL alive;

 

   //一個屬性可以添加多個修飾符,多個修飾符間用逗號隔開。

   @property (setter = setUsername:, getter = getUsername) NSString *name;

 

  

 

 

5. 多個屬性修飾符,需要用逗號隔開

@property (nonatomic, readonly,getter = birth) 

NSString * birthday;

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.