Objective-C 快速入門--基礎(五)

來源:互聯網
上載者:User

標籤:

1、什麼是屬性?屬性會幫我們做哪些事情?請詳細說明。

  (1)①屬性是Objective-C 2.0定義的文法,為執行個體變數提供了setter、getter方法的預設實現;②能在一定程度上簡化程式碼,並且增強執行個體變數的訪問安全性。

  (2)①屬性會對於你聲明的執行個體變數,它會預設幫你補齊你所需要的(你沒有聲明的,或者你沒有實現的)getter,setter方法;②如果你不滿意系統預設產生的getter,setter方法 需要同時重寫一個執行個體變數的getter,setter方法,這時就需要註明 @synthesize  然後用執行個體變數去賦值屬性名稱 // name = _name 不要寫反。

2、什麼是Attribute?屬性的Attribute有幾大類?都有什麼作用?

  (1)Objective-C提供屬性的目的是為了簡化程式員編碼,並且為屬性提供了一些關鍵字用以控制setter、getter的實現細節,這些關鍵字我們稱為屬性的屬性(Attribute);

  (2)一共3大類Attribute;

  (3)第一類:讀寫性控制(readonly、readwrite、setter、getter)

      ①readonly,告訴編譯器,只聲明getter方法(無setter方法)。

       例如:@property(readonly)NSString *name;  //等價於:- (NSString *)name;

      ②readwrite,告訴編譯器,既聲明setter又聲明getter。

       例如: @property(readwrite)NSString *name;  //等價於:- (void)setName:(NSString *)name;  - (NSString *)name;

      ③readwrite是讀寫性控制的預設設定。

    第二類:原子性控制(nonatomic、atomic)

      ①atomic:setter、getter方法在多線程訪問下是絕對安全的,即 setter、getter內部做了多線程訪問處理(原子性控制的預設設定是 atomic);

      ②nonatomic:setter、getter方法內部不會做多線程訪問處理,僅僅是普通的setter、getter方法;

    注意:①程式開發過程中,setter、getter處處都在用,如果使用atomic,需要不斷的對setter、getter加鎖解鎖以保證線程訪問安全,會很佔用系統資源,降低系統效能;

       ②通常設定為nonatomic,某些屬性需要安全執行緒的時候,才定義為atomic。

       例如:例如:@property (readwrite,nonatomic)NSString *name;  //等價於:- (void)setName:(NSString *)name;  - (NSString *)name;

    第三類:語義設定(assign、retain、copy)

      ①assign。setter、getter內部實現是直接賦值。

      樣本:例如:@property(nonatomic,assign)int age;

      

      ②retain。setter、getter的內部實現會做記憶體最佳化。

      樣本:例如:@property(nonatomic,retain)NSString *name;

      

      ③copy。setter、getter的內部實現也會做記憶體最佳化。

      樣本:例如:@property(nonatomic,copy)NSString *name;

      

    提示:①如果屬性是非物件類型(比如int,float等)屬性的語義設定使用assign;

       ②如果屬性是物件類型(比如NSStrng、NSArray等)屬性的語義設定使用retain;

       ③如果屬性是物件類型並且想得到參數的copy,使用copy關鍵字。

3、要想使用點文法必須要滿足什麼條件?

  凡是符合系統預設setter、getter書寫格式的方法都可以使用點文法。

  例如:[person setName:@"zhangsan"];  可以等價寫成   person.name = @"zhangsan";

     NSString *name = [person1 name];  可以等價寫成  NSString *name = person1.name;

4、使用點文法的實質就是在調用setter,getter方法.那什麼時候是在調用setter方法,什麼時候是在調用getter方法呢?

  有賦值操作就是在調用setter方法,   沒有賦值只是當做一個值使用的時候就是調用getter方法。

5、KVC的全稱是什麼?

  KVC全稱:(Key-Value-Coding),索引值編碼,是一種間接訪問執行個體變數的方法。 key:鍵,用於標識執行個體變數;vlaue:執行個體變數對應的值。

6、在KVC中,給對象的一個執行個體變數賦值,用什麼方法?

  ①普通索引值:setValue:forKey:

  ②有層級關係的賦值:比如:學生的老師的女朋友 [stu tea.gf]   就用:setValue:forKeyPath:

7、在KVC中,如果在賦值或取值過程中,key所對應的執行個體變數不存在,執行的結果是什麼?如何避免?

  當key不存在 防止崩潰 就在對應的類.m檔案中重寫setter方法就用 setValue:forUndefinedKey:

  樣本:

  

8、在KVC中給一個對象的執行個體變數批量賦值採用什麼方法?

  批量賦值 把索引值對存放在字典裡 然後直接賦值字典 就用 setValuesForKeysWithDictionary:

 Email:[email protected]

Objective-C 快速入門--基礎(五)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.