中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • Objective - C setter,getter與實例變量的關系, 屬性, 點語法

Objective - C setter,getter與實例變量的關系, 屬性, 點語法

發布時間:2020-07-25 10:59:59 來源:網絡 閱讀:1325 作者:Im劉亞芳 欄目:開發技術

什么時setter,getter,

  • 在OC里, 為實例變量賦zhi的方法稱作setter(設置器)

  • 讀取實例變量值的方法稱作getter(訪問器)

  • 我們之前寫的那些賦值取值的方法都可以稱作setter和getter

setter、getter的書寫格式

  • OC里規定里setter和getter的書寫格式

  • 如果一個實例變量是 int age; 或者int_age;

  • setter的書寫格式如下 - (void)setAge:(int)age;即set+首字母大寫的實例變量名(忽略下劃線)

  • getter的書寫格式如下, -(int)age; 即返回值類型與變量類型一致,方法名與實例變量名相同(忽略下劃線)

setter、getter與實例變量的關系

  • 無論setter還是getter內部操作的是實例變量

  • 每一個實例變量都需要一對setter和getter方法

屬性的定義

  • 屬性都聲明:使用@property聲明屬性(例如:@property NSString*name;)

  • 相當于@interface中聲明里兩個方法

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

  • -(NSString *)name;

屬性的實現

  • 屬性的實現:使用@synthesize實現屬性(例如 :@synthesize name = _name)

  • 相當于@implementtation實現里

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

  • - (NSString *)name;

屬性的屬性

  • Objective-C提供屬性的的是為了簡化程序員編碼 

  • 為屬性提供了一些關鍵字用以控制settergetter的實現細節 

  • 這些關鍵字我們稱為屬性的屬性(attribute

  • 一共3大類attribute。 

屬性的屬性共有三大類

第一類

  •      1。 讀寫性控制(readonly,readwrite,setter,getter)

  • 如果讀寫性控制的關鍵字是readonly,是告訴編譯器,只聲明getter方法(無setter方法)

               例如;@property(readonly)NSString *name;  等價于  - (NSString *)name;

  • 如果是readwrite ,告訴編譯器,即聲明setter有聲明getter

               例如:@property(readwrite)NSString *name;

                         等價于 - (NSString *)name;

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

  • readwrite是讀寫性控制的默認設置

第二類

  • 2.原子性控制(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;

                         等價于;- (NSString *)name;

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

第三類

  •   3.語義設置(assign,retain,copy)

  • 如果語義設置對關鍵字是assign。setter、getter內部實現是直接賦值,

          例如:@property(nonatomic , assign)NSString *name;

                         - (void)setName:(NSString *)name

                         {

                                  _name = name;

                           }

                         -(NSString *)name

                         {

                                   return   _name;

                                }

  • 如果語義設置的關鍵字是retain。setter、getter的內部實現會做內存優化     

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

          - (void)setName:(NSString *)name

          { if(_name != name){

               [_name release];

               _name = [name retain];

                         }

               }


          - (NSString *)name{

              return [[_name retain]autorelease];


               }

  • 如果語義設置的關鍵字是copy,setter、getter的內部實現也會做內存優化

               例如 @porperty(nonatomic , copy)NSString *name;

          - (void)setName:(NSString *)name

          {

              if (_name != name) {

                  [_name release];

                  _name = [name retain];

              }

          }

          - (NSString *)name

          {

              return [[_name retainautorelease];

          }

屬性需要注意的是

  • 如果屬性是非對象類型(比如int,float等)屬性等語義設置只用assign

  • 如果屬性是對象類型(比如NSString,NSArray等)屬性等語義設置使用retain

  • 如果屬性是對象類型,并且想得到參數的copy,使用copy關鍵字

-點語法的使用

  • 凡事符合系統默認setter、getter書寫格式的方法,都可以使用點語法

          例如:[person setName:@“zhangsan”];

          可以等價寫成 person.name = @“zhangsan”;


          NSString *name = [person name];

          可以等價寫成NSString *name = person.name;

  • 屬性是一對getter、setterfangfa,點語法是屬性的另一種調用格式


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

博罗县| 潢川县| 固镇县| 垣曲县| 富锦市| 藁城市| 曲水县| 张家口市| 佛坪县| 石渠县| 黑山县| 澜沧| 枞阳县| 江陵县| 布尔津县| 大丰市| 广南县| 安新县| 万山特区| 开原市| 云阳县| 博客| 鄂尔多斯市| 乐陵市| 自治县| 藁城市| 漾濞| 平塘县| 巴塘县| 兴安县| 得荣县| 马尔康县| 长葛市| 乌拉特后旗| 台北市| 乌鲁木齐县| 安国市| 老河口市| 潍坊市| 交口县| 武功县|