Objective-C在C語言的基礎上引入了object-oriented(面向對象)的概念。其class(類)與object(對象)就是面向對象思想的體現(xiàn)。
1. 那什么是類什么是對象呢欺矫?
對象是對某一事物的抽象,而類是對對象的抽象谜悟,類是一種抽象的數據類型则吟。通過實例化類得到對象,通過這個對象訪問它的屬性和行為皇忿。
通俗的來講畴蹭,比如:
"人"是一個類,它具有的屬性:性別鳍烁,年齡叨襟,身高等,具有的行為:吃飯幔荒、睡覺等糊闽,我們創(chuàng)建了這個類相當于創(chuàng)建了“人”的模板,通過這個模板就可創(chuàng)造出無數個具有這種特征(屬性和行為)的“人”的對象爹梁,這種方式我們稱為實例化右犹。
2. Objective-C如何創(chuàng)建類:
2.1 創(chuàng)建接口頭文件(在此內定義的方法和屬性供外部訪問)
//Human.h
@interface Human : NSObject
@property (copy)NSString* name;
@property (copy)NSString* gender;
@property int age;
-(void)eat; // - 代表實例方法,只能通過對象訪問
-(void)sleep:(int)hour;
+(bool)marryToA:(Human *)a ToB:(Human *)b; // + 代表類方法姚垃,通過類訪問念链。如同java的靜態(tài)方法
@end
定義接口:@interface 類名:父類,":"代表繼承(后面會詳細說明)父類积糯,如果沒有指定的父類钓账,就繼承NSObject,NSObject是所有類的基類絮宁。
定義屬性:@property 類型 屬性名;
定義方法:
-(返回值)方法名;
-(void)eat;
-(返回值)方法名:(參數類型)參數名;
-(void)sleep:(int)hour;
+(返回值)方法名:(參數類型)參數名 對外參數名:(參數類型)參數名;
+(bool)marryToA:(Human *)a ToB:(Human *)b;
"-" : 代表實例方法梆暮,只能通過對象訪問
"+": 代表類方法,通過類訪問绍昂。如同java的靜態(tài)方法啦粹,(如果一個方法不需要訪問任何實例屬性及實例方法的話,都可聲明為類方法窘游。類在單個進程運行時只會被加載一次唠椭,也就是說會為這個方法在堆中分配一次內存空間,但如果這個方法是屬性方法忍饰,每一次實例化對象都需要為這個方法分配一次內存空間贪嫂。)
2.2 創(chuàng)建實現(xiàn)類文件,實現(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(@"異性可以結婚");
return YES;
}
NSLog(@"同性不可以結婚");
return NO;
}
@end
{}:括號中 我們稱為方法體力崇,將方法要做的事情寫在方法體中斗塘。
self:代表當前實例化的對象,通過它在類內中訪問屬性及方法亮靴。
[self eat]; //通過self訪問方法
2.3 外部訪問馍盟,實例化對象:
Human* tim = [[Human alloc] init]; //實例化對象
tim.name = @"Tim"; //對象引用給name屬性賦值
tim.age = 23;
[tim eat]; //調用eat方法
[tim sleep:3]; //調用sleep方法并給參數傳值
[[Human alloc] init]:首先OC是通過發(fā)送消息的機制調用方法的,在這里很明顯alloc是Human的一個類方法茧吊,并且是從NSObject當中繼承過來的贞岭。這個方法的目的就是要求系統(tǒng)分配內存空間并返回已分配內存地址的引用對象,再調用這個對象的init方法將已分配的內存中的數據清空(置0或null)搓侄。