屬性和點語法


一、屬性
     1、屬性的聲明:在.h文件中使用@property聲明屬性。
          @property NSString *name;
       2、屬性的作用是生成setter以及getter方法的實現,如果方法內部操作的實例變量未定義,系統會自動生成一個_屬性名的實例變量,但是生成的實例變量的可見度是私有的,子類不可訪問。 
     3、一旦同時重寫了setter、getter方法,並且沒有實現@synthesizer,@synthesizer不再生成實例變量。
二、屬性的特性
     1、屬性的特性:為屬性提供了一些關鍵字用以控制setter、getter的實現細節,這些關鍵字稱為屬性的特性(attribute);
     2、讀寫性
          1)readonly:只讀狀態,是告訴編譯器,屬性只生成getter方法,不生成setter方法;
          2)readwrite:讀寫狀態,是告訴編譯器,屬性既生成setter方法又生成getter方法,既有設置器,也有訪問器,默認的讀寫特性;
          3)setter=:指定屬性生成的setter方法的名字;
          4)getter=:指定屬性生成的getter方法的名字。
               @property (readwrite, setter=setname:, getter = getname) NSString *name;
      3、原子性
          1)atomic:原子特性,setter、getter方法在多線程訪問下是絕對安全的,即setter、getter內部做了多線程訪問處理。默認的原子特性。
          2)nonatomic:非原子特性,settler、getter方法內部不會做多線程訪問處理,僅僅是普通的setter、getter方法。
          3)程序開發過程中,setter、getter會頻繁使⽤,如果使⽤atomic需要 不斷的對setter、getter加鎖解鎖以保證線程訪問的安全,會⾮常占⽤系統資源,降低系統性能。聲明屬性時,通常使用nonatomic。
               @property (nonatomic) NSString *name;
     4、語義特性
          1)如果屬性是非對象類型(比如int、float等)屬性的語義設置使用assgin;
          2)如果屬性是對象類型(比如NSString等)並且要保留這個對象的時候,屬性的語義設置使用retain;
          3)如果屬性是對象類型並且想要得到對象的副本,使用copy。    
三、點語法
     1、只要符合系統默認setter、getter書寫格式的方法都可以使用點語法,
屬性是一對getter、setter方法,點語法是屬性的另一種調用格式。
          setter方法:
          [person setName:@“Lily”];
          使用點語法:
          person.name = @“Lily”;
          getter方法:
          NSString *string = [person name];
          使用點語法
          NSString *string = person.name;
     2、類之間的循環引入問題 (#import 與 @class的區別)
          #import “Woman.h”循環引入的問題;
          #import “”引入類的接口部分,容易造成循環引入;
          @class只會告訴編譯器后面的字符是一個類名。並不會引入類的接口部分。使用@class聲明類后,要使用類中方法,需要在.m文件引入。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM