真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Objective-C中的屬性機制

    

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設(shè)、做網(wǎng)站與策劃設(shè)計,朔城網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務涵蓋:朔城等地區(qū)。朔城做網(wǎng)站價格咨詢:13518219792

Objective-C 2.0中的屬性機制為我們提供了便捷的獲取和設(shè)置實例變量的方式也可以說屬性為我們提供了一個默認的設(shè)置器和訪問器的實現(xiàn)。在學習OC中屬性之前我們先要知道為什么要為變量實現(xiàn)getter和setter方法我們先來了解一下實例的作用域。

    實例變量的作用域如下

        1. @public : 共有的該實例變量誰都可以訪問

        2.@protected 受保護的該實例變量只能在該類和其子類內(nèi)訪問父類protected的實例變量在子類中是private的默認是protected

        3.@private: 私有的該實例變量只能在該類的內(nèi)部訪問

        因為要用protected 或者 private來隱藏類的內(nèi)部細節(jié)用類或者對象是沒法直接訪問被隱藏的細節(jié)的所以要用getter和setter來訪問被隱藏的實例變量OC中的屬性機制就為我們提供了默認的getter和setter方法。下面我們要學習一下OC中的屬性機制。

        屬性的定義和實現(xiàn)

        1.屬性的定義

       屬性的定義用編譯器命令@property來定義比如要為私有的變量 int a定義getter和setter方法@property int a;  用@property會自動的為修飾的變量加上

     getter和setter方法。

        Demo如下  

1
2
3
4
5
6
7
8
9
10
11
@interface Student : NSObject
{
    NSString *name;
    int idNumber;
}
//定義屬性
@property NSString *name;
@property int idNumber;
 
//定義其他方法
@end

        2.屬性的實現(xiàn)

        在實現(xiàn)文件中我們用@synthesize來實現(xiàn)用@synthesize來修飾相應的變量就起到類getter 和 setter 的方法實現(xiàn)的作用。用@synthesize也可以給函數(shù)改名用@synthesize name = otherName; 就可以給方法改名。

            demo如下

1
2
3
4
@implementation Student
 @synthesize name, idNumber;
    //其他方法的實現(xiàn)
@end

        3.定義后屬性的使用

        在使用getter和setter方法時有一點要注意以neme為例getter方法名為 name, 而setter的名為 setName;在使用getter和setter方法時和普通的函數(shù)用法一樣

    

1
2
3
4
//調(diào)用name的setter方法
[student setName : @"ludashi"];
//調(diào)用name的getter方法
NSString *name = [student name];

        getter和setter方法也可以用點語法來實現(xiàn)

1
2
3
4
5
//name的setter方法也可以這樣寫
student.name  =  @“l(fā)udashi”
 
//name的getter方法也可以這樣寫
NSString *name = student.name;

         上面調(diào)用getter和setter方法的方式看著想是直接操作類的屬性其實不然也是通過方法來操作的。

 

    4.property有關(guān)的語法

        1.自定義存取方法名

            系統(tǒng)默認的存方法是setPropertyName, 默認的取方法是propertyName??梢杂靡韵路绞絹砀膕etter和getter方法的名字

            1用getter = getterName來指定getter自定義的名稱

                    demo:  @property (getter = getterName) NSString *name;

 

            2用setter = setterName來指定setter自定義方法的名稱

                    demo: @property (setter = setterName) NSString *name;

 

        2. property的可讀寫性

            property的可讀寫性決定屬性是否有setter方法

            1readwrite : 指定屬性是可讀寫的這是默認值因此可以省略

                      @property (readwrite) NSString *name;

              (2) readonly : 指明屬性是只讀的。系統(tǒng)不會setter方法但有g(shù)etter方法

                      @property (readonly) NSString *name;

 

       3.用于setter中的語義 決定了以何種方式對數(shù)據(jù)成員賦予新值

strong : 表示強引用關(guān)系即擁有對象的所有權(quán)。

weak : 表示弱引用不擁有對象的所有權(quán)當目標對象被銷毀之后屬性值會被自動設(shè)為nil;

            assign(賦值): 直接賦值計數(shù)器不會加一簡單的賦值方法默認賦值方式適合基本數(shù)據(jù)類型

            copy(拷貝)把原來的對象拷貝過來計數(shù)器會加一比如原來對象的地址為0x01 ,拷貝過來的對象的地址為0x02;

            retain(保留)這種方式傳遞的是指針原有的對象和被賦值的對象的地址是一樣的

        

       4.原子操作

                atomic: 線程安全的

                nonatomic: 線程不安全的

 

我們可以簡寫屬性直接在接口文件中吧{}省略掉直接用@property來定義方法省去實現(xiàn)文件中的@synthesize, 訪問屬性時用_propertyName 給屬性賦值時用self.propertyName


本文標題:Objective-C中的屬性機制
新聞來源:http://weahome.cn/article/gssoep.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部