官术网_书友最值得收藏!

4.5 初始化方法

我們先回憶一下創建五號機器人對象的方法。

    CRobot *robot5 = [[CRobot alloc] init];

代碼中,初始化對象robot5時調用了兩個方法,即alloc和init。其中,alloc方法用于創建一個基本的CRobot對象,接下來的init方法就是對象的初始化方法。

在Objective-C中約定,在類中以init開頭的方法都會假設為對象的初始化方法,所以,在對自定義的方法命名時,應該注意這一點。

除了init方法,我們還可以創建更多的初始化方法,如下面的代碼,我們就在CRobot類的接口部分聲明了一個初始化方法。

    @interface CRobot: NSObject
    -(instancetype) initName:(NSString*)n andSpeed:(float)s;
    @end

然后,我們在類的實現部分定義這個初始化方法,如下面的代碼。

    @implementation CRobot
    -(instancetype) initName:(NSString*)n andSpeed:(float)s
    {
        self = [super init];
        if (self) {
            self.name = n;
            self.speed = s;
        }
        return self;
    }
    @end

我們先看一下代碼中新出現的三個關鍵字:

? instancetype,指定初始化方法的返回值為instancetype類型,表示此方法會返回當前類類型的對象(實例)。

? super,表示父類(基類、超類)對象。

? self,表示當前對象。

這三個關鍵字的作用,我們會在4.6節中詳細介紹。

現在,我們回到初始化方法中,下面的代碼演示了這個自定義初始化方法的使用。

    CRobot *robot5 = [[CRobot alloc] initName:@"NO.5" andSpeed:50.0];
    NSLog(@"%@ 的速度是 %f km/h", robot5.name, robot5.speed);

我們看到,使用初始化方法,可以簡化很多的對象初始代碼,而且通過多個初始化方法,可以快速創建多種形式的對象,在很大程度上提高開發效率。

創建和使用初始化方法時,有一些問題需要我們注意:

? 初始化方法的返回值類型應該定義為instancetype,而在早期的Objective-C代碼中,初始化方法返回值通常定義為id類型。

? 初始化方法都應該以init開頭。

? 初始化方法的參數定義與普通方法的參數定義相同。

? 在初始化方法中,一般情況下,都應該先使用super關鍵字調用基類的初始化方法,以保證初始化工作的完整性。

? 為了簡化代碼,我們也可以在初始化方法中調用本類中其他的初始化方法,此時,應使用self(當前實例)調用,如[self init]。

主站蜘蛛池模板: 息烽县| 常德市| 北安市| 辰溪县| 竹溪县| 东乡县| 肇州县| 库伦旗| 体育| 洛南县| 克拉玛依市| 文山县| 景泰县| 全椒县| 峨山| 鹤壁市| 房产| 朝阳市| 綦江县| 三原县| 丹东市| 邹平县| 丹巴县| 尉犁县| 满洲里市| 滕州市| 耿马| 大庆市| 金溪县| 安溪县| 江安县| 德阳市| 宾川县| 大洼县| 于田县| 达州市| 晴隆县| 犍为县| 新密市| 宁化县| 镇赉县|