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

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Objective-C(2)離不開的---類與對象

發布時間:2020-07-11 11:17:58 來源:網絡 閱讀:350 作者:ymanmeng123 欄目:移動開發
  • 接口與實現的分離

Objective-C定義一個類,分成兩部分:接口、實現

     接口(公開):聲明類中的成員變量、屬性、方法。

     實現(隱藏):實現類中的方法。

接口與實現分離的好處:

          想要使用這個類時只需知道接口部分即可。

          同時將實現部分隱藏起來,有利于代碼的封裝

     例如:實現一個汽車類,只需要知道如何開車,而不需要汽車如何工作的


  • 定義類的接口部分

關鍵字:@interface  @end

     @interface className : parentClassName

     {

          //成員變量

     }

          //方法的聲明以及屬性的聲明

     @end

成員變量的訪問權限:

     @public          作用域不受限制                              //如

     @protected    作用域被限定在類和子類中

     @private         作用域被限定在類中

     @package      作用域被限定在整個框架中

     默認是@protected

方法的聲明方式:

     - (type) methodName;

示例代碼:

//接口部分:屬性、方法的聲明
@interface AMStudent : NSObject
{//編程規范:屬性名以_開頭,多個單詞,除第一個單詞意外的單詞首字母大寫
    NSInteger _id;
    NSString *_name;//OC對象必須用指針存儲地址
    NSInteger _age;
    NSInteger _score;
}
/**
 顯示學生信息
 */
- (void) showInfo;

@end

    /** */ 是Xcode特有的注釋方式

    在Xcode環境中,調用該方法的自動補齊提示處,提示注釋內容

    小伙伴們可以試一試


  • 定義類的實現部分

關鍵字:@implementation  @end

     @implementation class_name

     {

          //私有成員變量

     }

     //方法的實現

     @end

     可以在實現部分定義成員變量,但不鼓勵這么去做

          權限一定是private;不能和接口部分的成員變量重復 

    方法的實現和實現函數類似


示例代碼:

//實現部分:方法的定義
@implementation AMStudent

- (void)showInfo
{
    NSLog(@"[id:%ld][name:%@][age:%ld][score:%ld]", self->_id, self->_name, self->_age, self->_score);
}


@end

其他注意:

     @interface...@end以及@implementation...@end不能嵌套

     接口部分聲明的方法,在實現部分必須要給出實現

     實現部分的方法如果在接口部分沒有聲明接口,則成為一個內部方法不對外公開



  • 實例化對象

實例化一個對象,是按照定義的類創造出一個實體對象,如根據汽車的圖紙(類)造出汽車(對象)。

最簡單的方法是:

     className * objName = [className new];

     Objective-C的對象,必須使用指針存儲地址,不能創建局部對象和全局對象

     []運算符的含義是: 向對象發送一個消息,對象收到消息后會調用對應的方法。

     new這個消息的含義是: 創建一個對象(分配空間、成員變量初值為0)

示例代碼:

AMStudent *ps = [AMStudent new];


在OC中類其實也是一種對象

     所以new這個消息是發送給類這種對象的

     對應方法我們稱之為類方法,和對象方法是不同的


  • 對象方法

要和函數區分:

     函數可直接調用,方法需要通過[]發送消息

     方法內可以直接使用類(對象)中的成員變量


沒有參數的方法:

    接口聲明: - (returnValueType) methodName;

    方法調用: [objName methodName]

- (void) showInfo;
- (AMStudentScoreLevel) getScoreLevel; //AMStudentScoreLevel是枚舉類型


一個參數的方法:

     接口聲明:      - (returnValueType) methodName: (parType) parName;

     方法調用:      [objName methodName:argName];

/**
 設置學生的ID
 */
- (void) setId:(NSInteger) ID;


多個參數的方法:

     接口聲明:

     - (returnValueType) methodName1: (par1Type) par1Name

                                        methodName2:(par2Type) par2Name ...;

     方法調用:

     [objName methodName1:argName methodName2:arg2Name ...];

    蘋果公司鼓勵工程師使用這種句子一樣寫法 ,即代碼本身具有注釋的部分功能

/**
 設置學生信息
 */
- (void) setInfoWithId:(NSInteger) identifier andWithName:(NSString*) name andWithAge:(NSInteger) age andWithScore:(NSInteger) score;


方法中的self關鍵字:

     是一個指針,指向當前對象,即調用這個方法的對象

     注意:self指針的指向不能變化

     用途:

         成員變量(屬性)與參數名的區分

         獲得當前對象的地址(如作為返回值)

         調用對象的其他方法

- (void)showInfo
{
    NSLog(@"[id:%ld][name:%@][age:%ld][score:%ld]", self->_id, self->_name, self->_age, self->_score);
}


description方法:

     任何一個類都可以實現這個方法(無需聲明),該方法是由父類NSObject繼承而來的

     該方法返回一個OC對象類型NSString

     在NSLog()函數打印時,指定%@,將自動調用該方法并打印返回的字符串。

- (NSString *)description
{//重寫的NSObject的方法,%@輸出的就是返回的字符串
    NSString * p = [NSString stringWithFormat:@"AMStudent : [id:%ld][name:%@][age:%ld][score:%ld]", self->_id, self->_name, self->_age, self->_score];
    
    return p;
}



  • 接口的源文件擴展

在類的源文件的@implementation之前添加一個接口的擴展,是聲明內部方法、成員變量、屬性的常見做法

在接口擴展中聲明的內容將不對外開放,僅允許在該類的源文件內部使用

語法:在@implementation前

    @interface 類名 ()

     ...

     @end




向AI問一下細節

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

AI

淮滨县| 墨脱县| 九江县| 灌南县| 登封市| 玉山县| 昌邑市| 红原县| 平度市| 曲松县| 郁南县| 扎赉特旗| 长海县| 衡东县| 梨树县| 桑日县| 阳谷县| 弥渡县| 商洛市| 富川| 胶州市| 县级市| 塔城市| 搜索| 肇东市| 缙云县| 太仓市| 南陵县| 武汉市| 承德市| 邢台市| 油尖旺区| 盐边县| 邵武市| 新营市| 米脂县| 林州市| 奈曼旗| 信阳市| 喀喇| 临海市|