1. 程式人生 > >OC學習篇之---類的初始化方法和點語法的使用

OC學習篇之---類的初始化方法和點語法的使用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

昨天介紹了OC中類的定義和使用:http://blog.csdn.net/jiangwei0910410003/article/details/41657603,今天我們來繼續學習類的初始化方法和點語法的使用


一、首先來看一下類的初始化方法

在Java中我們知道一個每個類都有構造方法,這裡的初始化方法就是和構造方法一個概念的,但是這裡有一個區別是:Java中有預設構造方法,當我們去自定義構造方法的時候,這個預設構造方法就會被替換了,但是OC中是不會的,這點需要注意。

下面來看一下如何自定義初始化方法:

Person.h

////  Person.h//  03_InitDemo////  Created by jiangwei on 14-10-10.//  Copyright (c) 2014年 jiangwei. All rights reserved.//#import <Foundation/Foundation.h>
@interface Person : NSObject{    NSString *_name;    NSInteger _age;}//自定義初始化方法,必須以init開頭- (id)initWithName:(NSString *)name withAge:(NSInteger)age;//列印資訊- (void)showInfo;@end
這裡我們定義了一個初始化方法,對名稱和年齡進行初始化賦值操作

注:OC中自定義初始化方法的名稱必須是以init開頭


在來看一下實現:

Person.m

////  Person.m
//  03_InitDemo////  Created by jiangwei on 14-10-10.//  Copyright (c) 2014年 jiangwei. All rights reserved.//#import "Person.h"@implementation Person- (id)initWithName:(NSString *)name withAge:(NSInteger)age{    //固定寫法,可以背下來哦~~        //呼叫父類的初始化方法    self = [super init];        if(self != nil){        _name = name;        _age = age;    }        return self;}- (void)test{    NSLog(@"test");}- (void)showInfo{    [self test];//呼叫自己的方法    NSLog(@"name is %@ and age is %d",_name,_age);}@end
這裡我們看到了,初始化方法返回的型別是id型別,關於OC中的 id型別,可以認為和C語言中的void*是相等的,這種型別在OC中經常被用到,還有就是 self關鍵字的使用,這裡的self關鍵字就相當於Java中的this關鍵字,指代當前類物件,還有super關鍵字,這個和Java中的 super也是一樣的,指代父類物件。還有一個是 nil,他就相當於Java中的 null,空物件的概念,用於判斷的。

同時這裡還要記住一點:

以後OC中自定義初始化的方法的模板:

//固定寫法,可以背下來哦~~//呼叫父類的初始化方法self = [super init];if(self != nil){    _name = name;    _age = age;}  return self;
這個沒什麼好說的,就是一個模板,所以初學者就背下來吧,不過用多了,自然就記住了。


下面來看一下如何使用初始化方法:

main.m

////  main.m//  03_InitDemo////  Created by jiangwei on 14-10-10.//  Copyright (c) 2014年 jiangwei. All rights reserved.//#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        //初始化方法只能呼叫一次        Person *person = [[Person alloc] initWithName:@"jiangwei" withAge:22];        [person showInfo];                person = [[Person alloc] init];        [person showInfo];                //id型別,類似於void*        //但是id型別一般不這麼使用,一般會作為方法的返回值和傳入的引數型別        id person1 = [[Person alloc] initWithName:@"huangdaoyang" withAge:23];        [person1 showInfo];    }    return 0;}
我們使用了我們自定義的方法例項化了一個Person物件出來,同時呼叫他的showInfo方法,列印結果,這裡我們也會發現Person的init方法任然可以使用,這個和Java中是有區別的,其實,在上篇文章中說到過,這個init方法是NSObject父類的,可以猜想到這個方法的邏輯功能就是初始化,所以我們在自定義初始化方法的時候,都是會用到這個方法的。當然我們可以定義多個初始化方法,後面我們在介紹 Foundation框架的時候,會發現系統給我提供的類有很多自定義的初始化方法。

執行結果: