GeekBand Objective-C 類與對象

Objective-C在C語言的基礎(chǔ)上引入了object-oriented(面向?qū)ο?的概念。其class(類)與object(對象)就是面向?qū)ο笏枷氲捏w現(xiàn)。

1. 那什么是類什么是對象呢?

對象是對某一事物的抽象,而類是對對象的抽象,類是一種抽象的數(shù)據(jù)類型。通過實(shí)例化類得到對象,通過這個對象訪問它的屬性和行為。

通俗的來講,比如:
"人"是一個類,它具有的屬性:性別,年齡,身高等,具有的行為:吃飯、睡覺等,我們創(chuàng)建了這個類相當(dāng)于創(chuàng)建了“人”的模板,通過這個模板就可創(chuàng)造出無數(shù)個具有這種特征(屬性和行為)的“人”的對象,這種方式我們稱為實(shí)例化。

2. Objective-C如何創(chuàng)建類:

2.1 創(chuàng)建接口頭文件(在此內(nèi)定義的方法和屬性供外部訪問)
//Human.h
@interface Human : NSObject

@property (copy)NSString* name;
@property (copy)NSString* gender;
@property int age;

-(void)eat;     // - 代表實(shí)例方法,只能通過對象訪問
-(void)sleep:(int)hour;

+(bool)marryToA:(Human *)a ToB:(Human *)b;     // + 代表類方法,通過類訪問。如同java的靜態(tài)方法

@end

定義接口:@interface 類名:父類,":"代表繼承(后面會詳細(xì)說明)父類,如果沒有指定的父類,就繼承NSObject,NSObject是所有類的基類。
定義屬性:@property 類型 屬性名;
定義方法:
-(返回值)方法名;

-(void)eat;

-(返回值)方法名:(參數(shù)類型)參數(shù)名;

-(void)sleep:(int)hour;

+(返回值)方法名:(參數(shù)類型)參數(shù)名 對外參數(shù)名:(參數(shù)類型)參數(shù)名;

+(bool)marryToA:(Human *)a ToB:(Human *)b;

"-" : 代表實(shí)例方法,只能通過對象訪問
"+": 代表類方法,通過類訪問。如同java的靜態(tài)方法,(如果一個方法不需要訪問任何實(shí)例屬性及實(shí)例方法的話,都可聲明為類方法。類在單個進(jìn)程運(yùn)行時只會被加載一次,也就是說會為這個方法在堆中分配一次內(nèi)存空間,但如果這個方法是屬性方法,每一次實(shí)例化對象都需要為這個方法分配一次內(nèi)存空間。)

2.2 創(chuàng)建實(shí)現(xiàn)類文件,實(shí)現(xiàn)接口定義的方法的具體行為。
//Human.m
@implementation Human

-(void)eat{
    NSLog(@"%@ 吃飯",self.name);
}

-(void)sleep:(int)hour{
    NSLog(@"%@ 休息 %d 小時",self.name, hour);
}

+(bool)marryToA:(Human *)a ToB:(Human *)b{
    if (![a.gender isEqualToString:b.gender]) {
        NSLog(@"異性可以結(jié)婚");
        return YES;
    }
    NSLog(@"同性不可以結(jié)婚");
    return NO;
}

@end

{}:括號中 我們稱為方法體,將方法要做的事情寫在方法體中。
self:代表當(dāng)前實(shí)例化的對象,通過它在類內(nèi)中訪問屬性及方法。

[self eat]; //通過self訪問方法
2.3 外部訪問,實(shí)例化對象:
Human* tim = [[Human alloc] init]; //實(shí)例化對象
tim.name = @"Tim"; //對象引用給name屬性賦值
tim.age = 23;
[tim eat];  //調(diào)用eat方法
[tim sleep:3];  //調(diào)用sleep方法并給參數(shù)傳值

[[Human alloc] init]:首先OC是通過發(fā)送消息的機(jī)制調(diào)用方法的,在這里很明顯alloc是Human的一個類方法,并且是從NSObject當(dāng)中繼承過來的。這個方法的目的就是要求系統(tǒng)分配內(nèi)存空間并返回已分配內(nèi)存地址的引用對象,再調(diào)用這個對象的init方法將已分配的內(nèi)存中的數(shù)據(jù)清空(置0或null)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容