一羞酗、Objective-C基本概念
面向?qū)ο缶幊蹋篛OP (Object Oriented Programing)
類似的語言:C++腐宋,Java,C#
1檀轨、類和對(duì)象
類:具有相同特征和行為的事物的抽象胸竞。
對(duì)象是類的實(shí)例,類是對(duì)象的類型裤园。
類是模板撤师,對(duì)象是具體表現(xiàn),任何對(duì)象都要占用內(nèi)存空間拧揽。
2剃盾、面向?qū)ο蠛兔嫦蜻^程的區(qū)別
面向?qū)ο笠詫?duì)象為中心腺占;
面向過程以事件為中心。
3痒谴、編程過程:定義類衰伯,創(chuàng)建對(duì)象,使用對(duì)象
面向?qū)ο缶幊讨谢担葎?chuàng)建出對(duì)應(yīng)的類意鲸,再由類生成對(duì)象,進(jìn)而完成我們的開發(fā)尽爆。
4怎顾、OC中的數(shù)據(jù)類型:
基本數(shù)據(jù)類型:int、float漱贱、double槐雾、結(jié)構(gòu)體、BOOL幅狮,聲明時(shí)不加*
NSInteger age = 18;
int number = 1;
float score = 98;
對(duì)象類型:使用類創(chuàng)建的數(shù)據(jù)類型募强,聲明時(shí)加*
如:
C語言中使用字符串? “hello”
OC語言中使用字符串對(duì)象? @“hello”
NSString 是系統(tǒng)提供的字符串類,用NSString定義對(duì)象類型的變量時(shí)崇摄,必須加上*
NSString * name = @"hello";
二擎值、類的定義
1、類的定義包含兩部分:接口部分逐抑,實(shí)現(xiàn)部分
接口部分在.h文件中鸠儿,實(shí)現(xiàn)部分在.m文件中。
2厕氨、接口部分
關(guān)鍵字標(biāo)志:@interface...@end
作用:聲明類的特征和行為
@interface后接 類名 : 父類名
A捆交、聲明類的特征,即聲明實(shí)例變量腐巢,在@interface后的{ }中。變量中存儲(chǔ)的是對(duì)象的數(shù)據(jù)(類似于結(jié)構(gòu)體的成員變量)玄括。
實(shí)例變量名必須以下劃線開頭冯丙,首字母小寫,使用駝峰命名法遭京。
B胃惜、聲明類的行為:即聲明方法
OC中的方法,類似于C語言的函數(shù)哪雕,是用于實(shí)現(xiàn)某個(gè)功能的代碼段船殉。
方法聲明語法:
-/+ (返回值類型) 方法名;
方法名的聲明在聲明文件.h中斯嚎。方法實(shí)現(xiàn)在實(shí)現(xiàn)文件.m中利虫。
3挨厚、實(shí)現(xiàn)部分
關(guān)鍵字標(biāo)志:@implementation…@end
作用:編寫方法的具體實(shí)現(xiàn)
@implementation后接創(chuàng)建的類名(和@interface后接的類名一致,不是父類名)糠惫。
4疫剃、對(duì)象和方法的使用
在控制臺(tái)輸出
C語言中使用printf輸出。
OC中使用NSLog輸出硼讽,在輸出內(nèi)容前加@“ ”巢价。
NSLog(@"age = %ld", age);
NSLog(@"number = %d", number);
NSLog(@"score = %.1f", score);
輸出對(duì)象類型的數(shù)據(jù)使用%@。
NSLog(@"name = %@", name);
三固阁、創(chuàng)建對(duì)象
創(chuàng)建Person類壤躲,繼承于父類NSObject
Person.h文件
@interface Person : NSObject
{
@public
NSString * _name;?? // 姓名
NSString * _gender; // 性別
int _age;?????????? // 年齡
}
- (void) sayHi;
@end
Person.m文件
@implementation Person
- (void) sayHi
{
NSLog(@"How are you ");
}
@end
語法:類名? * 指針變量 = [ [類名 alloc] init];
main.m 文件中
1、分配內(nèi)存空間
a备燃、使用alloc方法在堆區(qū)分配Person類的內(nèi)存空間碉克,存儲(chǔ)創(chuàng)建的對(duì)象。
b赚爵、分配的內(nèi)存空間的數(shù)據(jù)會(huì)被自動(dòng)清空棉胀,即所有的實(shí)例變量的初始值為0。
c冀膝、返回分配的內(nèi)存空間的地址唁奢。指針接收地址。
[Person alloc]在堆區(qū)創(chuàng)建對(duì)象窝剖,定義指針p1存儲(chǔ)對(duì)象在堆區(qū)的內(nèi)存空間地址麻掸。
Person * p1 = [Person alloc];
注:
OC中使用[ ]調(diào)用方法,方法和調(diào)用的對(duì)象層級(jí)對(duì)應(yīng)赐纱。
如:[類類方法] [對(duì)象實(shí)例方法]
2脊奋、初始化對(duì)象
使用實(shí)例init方法對(duì)創(chuàng)建的對(duì)象進(jìn)行初始化。
現(xiàn)在init方法是一個(gè)空實(shí)現(xiàn)疙描。
p1 = [p1 init];
創(chuàng)建對(duì)象一般采用的方式是:
Person * p1 = [ [Person alloc] init ];
在對(duì)象創(chuàng)建完成后诚隙,可以對(duì)實(shí)例變量進(jìn)行賦值操作。
如:Person * p2 = p1;
四起胰、使用對(duì)象
1久又、調(diào)用方法實(shí)現(xiàn)功能 [? ]
使用建立好的對(duì)象p1
Person * p1 = [ [Person alloc] init ];
[p1?sayHi];
運(yùn)行即可得:How are you
2效五、操作實(shí)例變量 為實(shí)例變量賦值
p1->name = @”zhangsan”;
p1->gender = @’’male”;
p1->age = 18;
也可以對(duì)賦值的實(shí)例變量進(jìn)行修改
p1->age = 20;
3地消、讀取值
NSLog(@"%@ %@ %d", p1->_name,p1->_gender, p1->_age);
運(yùn)行程序得到為變量賦的值。
五畏妖、實(shí)例變量有三種可見度
@public 實(shí)例變量可以在類的內(nèi)部和外部操作
@protected?實(shí)例變量只能在該類和其子類內(nèi)操作
@private?實(shí)例變量只能在該類的內(nèi)部操作
@public 類型的實(shí)例變量的操作方法
1脉执、類的外部?? 對(duì)象->實(shí)例變量
2、類的內(nèi)部?? 在實(shí)例方法的實(shí)現(xiàn)部分戒劫,直接使用實(shí)例變量
聲明Person類的introduce方法半夷,在實(shí)現(xiàn)部分使用public實(shí)例變量
所有使用Person類創(chuàng)建的對(duì)象婆廊,都可以調(diào)用introduce方法
在實(shí)例方法中可以直接使用實(shí)例變量(在類的內(nèi)部調(diào)用實(shí)例變量),哪個(gè)對(duì)象調(diào)用了實(shí)例方法玻熙,那么實(shí)例變量中的值屬于當(dāng)前調(diào)用這個(gè)方法的對(duì)象
- (void)introduce
{
NSLog(@"name: %@ gender: %@ age: %d", _name, _gender, _age);
}
六否彩、初始化方法 init
初始化init方法,即重寫init方法嗦随,為聲明的類的實(shí)例變量賦初值列荔,同時(shí),所有創(chuàng)建的類的對(duì)象都默認(rèn)擁有init方法為變量賦的初值枚尼。
init(初始化方法)用來初始化(賦值)聲明的實(shí)例對(duì)象的初始值贴浙。
- (instancetype)init? //- (id)init 類型功能類似
{
//???在實(shí)例方法中,self表示調(diào)用這個(gè)方法的對(duì)象
//???self表示Person類
//???所有的學(xué)生對(duì)象在初始化之后署恍,_age都是18
//???在初始化方法中設(shè)置的實(shí)例變量崎溃,后續(xù)是可以修改值
_age = 18;
return self;
}
七、其他
1盯质、創(chuàng)建的Person類型的對(duì)象的內(nèi)存地址賦值給指針p1袁串。
指針p1指向了一個(gè)Person對(duì)象。
當(dāng)一個(gè)指針指向某個(gè)對(duì)象時(shí)呼巷,可以用指針代指對(duì)象囱修。如:Person對(duì)象p1.
2、Person * p3 = nil;//類似于NULL王悍。對(duì)象類型的指針使用nil破镰。
p3被稱為空指針。
在OC中對(duì)空指針nil做任何操作都無效(相當(dāng)于什么都沒有做)压储,對(duì)NULL做操作程序會(huì)崩潰鲜漩。
3、使用@可以打印多種對(duì)象
使用%@打印對(duì)象
a集惋、顯示<類名:地址>孕似,一般是在打印自定義類型的對(duì)象或部分系統(tǒng)提供的類型的對(duì)象時(shí)輸出
NSLog(@"%@", p1);
得p1的地址。
b刮刑、顯示字符串對(duì)象的內(nèi)容
NSString * str = @"hello";
NSLog(@"%@", str);
c鳞青、顯示(null)? 打印了空指針
NSString * string = nil;
NSLog(@"%@", string);
下圖為今年部分iOS開發(fā)的視頻教程,因?yàn)椴欢〞r(shí)更新中故不做多的截圖为朋,如果有iOS開發(fā)上的問題不懂或者需要視頻教程可以看我的個(gè)人簡(jiǎn)介。
不定時(shí)更新中厚脉。