91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • 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

金门县| 泾川县| 嵊泗县| 阿图什市| 屯留县| 武威市| 白沙| 香格里拉县| 诸暨市| 连南| 建水县| 榆树市| 江达县| 报价| 青浦区| 兴义市| 基隆市| 阳西县| 高碑店市| 垫江县| 察隅县| 留坝县| 青海省| 兰州市| 四川省| 日照市| 哈尔滨市| 福海县| 那坡县| 郎溪县| 巴林右旗| 张掖市| 淮滨县| 乌兰浩特市| 苏尼特右旗| 双鸭山市| 邛崃市| 通道| 平湖市| 蓬溪县| 治多县|