學(xué)習(xí)目標(biāo)
1.【了解】Objective-C語言簡介
2.【掌握】第一個OC程序
3.【掌握】OC中的字符串
4.【熟悉】OC中的一些玩意
5.【了解】面向過程與面向?qū)ο?/p>
6.【掌握】類的聲明和實現(xiàn)
7.【掌握】類的方法
一饱搏、Objective-C語言簡介
Objective-C簡稱Obj-C或者OC腮敌,Objective的意思就是面向?qū)ο蟮淖槿ァC其實就是在C語言的基礎(chǔ)之上悴势,封裝了一層面向?qū)ο蟮恼Z法,他并不是一門全新的編程語言毫捣。OC是Mac OS X系統(tǒng)和iOS系統(tǒng)的主要開發(fā)編程語言名党,當(dāng)然馬上要被Swift給替代了,然并卵质蕉,我們還是得好好學(xué)習(xí)OC势篡,因為現(xiàn)在大多數(shù)公司還是使用OC來做iOS開發(fā)。
二模暗、第一個OC程序
OC程序的后綴和入口
C程序的源文件的后綴名為.c禁悠,OC程序的源文件是后綴名為.m,m就是message的意思兑宇。因為OC是完全兼容C語言的碍侦,所以在.m文件之中是可以寫任意的C代碼。并且OC中main函數(shù)仍然是OC程序的入口隶糕,作用和C語言中的是一樣的瓷产,這里就不贅述了。
#import指令
他是一個增強版的#incluce指令枚驻,并且用法和#include指令的用法相同濒旦。并且#import在包含文件的時候會先判斷這個文件是否已經(jīng)被包含,如果沒有被包含就包含再登,如果已經(jīng)被包含尔邓,就算了晾剖。
框架
蘋果或者第三方事先將一些牛逼(常用)的功能寫好,把這些功能模塊封裝在一個一個類之中梯嗽,把這些功能提供給大家用齿尽。這些類的集合就叫做框架,說白了就是一個功能集合灯节。
Foundation框架
提供了一些OC最基礎(chǔ)的功能循头。Foundation.h這個文件中包含了所有Foundation框架中的頭文件,#import 就相當(dāng)于包含了所有Foundation框架的頭文件显晶。
@autoreleasepool
他是一個自動釋放池贷岸,管理內(nèi)存的,到時候再扯磷雇。
NSLog函數(shù)
是printf函數(shù)的增強版偿警,作用也是向控制臺輸出信息。
1.NSLog輸出完畢信息之后會默認(rèn)加一個\n唯笙,如果我們手動加了一個\n螟蒸,NSLog的自動換行就會失效。
2.在輸出信息的同時還會輸出一些與程序有關(guān)的其他信息(系統(tǒng)時間崩掘、程序名七嫌、進(jìn)程ID、線程ID)苞慢。
3.NSLog函數(shù)支持printf函數(shù)的全部格式控制符诵原,其用法也相同。
4.NSLog函數(shù)的字符串參數(shù)前面必須要加一個@符號挽放,這是OC里的字符串格式绍赛。
5.NSLog可以使用%@格式控制符輸出對象,而printf不能輸出對象辑畦。
6.NSLog函數(shù)的第一個參數(shù)是NSString類型的指針吗蚌,所以必須給一個OC字符串。
三纯出、OC中的字符串
C語言使用字符數(shù)組和字符指針的方式來存儲字符串蚯妇,OC中專門設(shè)計了一個新的數(shù)據(jù)類型(NSString)來保存字符串。我們無需關(guān)心內(nèi)部是如何實現(xiàn)的暂筝,只要會使用就行了箩言,相對于C語言中的字符串,它更易用更方便焕襟。
注意:
1.OC中的字符串常量必須加一個@前綴分扎,寫在雙引號外面。比如
@"zhoujianfeng"
2.OC的字符串常量使用NSString類型的指針變量來保存地址胧洒。比如
NSString *str = @"zhoujianfeng";
3.NSString類型的指針變量只能保存OC字符串地址畏吓。不能
NSString *str = "zhoujianfeng";//這種是錯誤的
4.使用%@格式控制符輸出NSString類型的字符串。比如
NSLog(@"%@",str);
四卫漫、OC中的一些玩意
NS前綴:為了區(qū)分這些東西的前身是NeXTStep菲饼,就為他們加了一個前綴NS。
@符號:將C語言的字符串轉(zhuǎn)換為OC的字符串列赎,"zhou" 加了就成 @"zhou"宏悦。OC中新增的關(guān)鍵字絕大部分都是以@開頭。
OC支持C中的所有數(shù)據(jù)類型包吝,并且在此基礎(chǔ)之上新增了一些數(shù)據(jù)類型饼煞。比如BOOL類型、Boolean類型诗越、id類型砖瞧、class、SEL類型嚷狞、nil块促、block代碼塊等等。
五床未、面向過程與面向?qū)ο?/p>
面向過程:
遇到一個需求的時候竭翠,實現(xiàn)這個需求的過程、步驟都是自己親自去做薇搁。(執(zhí)行者)與底層交互效率很高斋扰。
面向?qū)ο螅?/p>
遇到一個需求的時候,實現(xiàn)這個需求的過程啃洋、步驟自己不做传货,而是去找一個專門做這個事情的人來做。(指揮者)后期程序的維護(hù)和擴展非常的方便裂允,如果功能發(fā)生變化损离,我們只需要換一個人就行了。
六绝编、類的聲明和實現(xiàn)
015-OC基礎(chǔ)語法-OC筆記
對象是生活中看得見僻澎、摸得著、具體存在的個體十饥。而類則是對一群具有相同特征窟勃、行為的事物的統(tǒng)稱。
類的三要素:
類名:這類事物叫做什么名字
成員變量:這類事物具有相同的特征
方法:這類事物具有相同的行為
類的聲明語法:
@interface 類名 : 父類名
{
//實例變量
}
//方法的聲明
@end
類的實現(xiàn)語法:
@implementation 類名
//方法的實現(xiàn)
@end
注意:
1.類的聲明一定要在類的實現(xiàn)前面逗堵,并且是直接寫在源文件中秉氧,不能寫到main函數(shù)中。
2.類名的每一個單詞的首字母大寫蜒秤,類名和NSObject之間是:號汁咏,實例變量名必須要以下劃線開頭亚斋。
3.類分為類的聲明和類的實現(xiàn)兩部分,缺一不可攘滩,并且都以@end結(jié)尾帅刊。
簡單案例:
#import
//類的聲明
@interface Person : NSObject
{
@public
NSString *_name;
int _age;
float _height;
float _weight;
}
@end
//類的實現(xiàn)
@implementation Person
@end
//main主函數(shù)
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [Person new];
//因為這些實例成員的訪問權(quán)限是@public,所以可以直接訪問
person->_name = @"jack";
person->_age = 18;
person->_height = 1.8;
person->_weight = 60;
//輸出人的各種信息
NSLog(@"name = %@,age = %i,height = %.2f,weight = %.2f",person->_name,person->_age,person->_height,person->_weight);
}
return 0;
}
七漂问、類的方法
我們都知道類是一群具有相同的屬性赖瞒、相同的行為的事物統(tǒng)稱,在這里說的行為就是類的方法(有些屌絲也叫函數(shù))蚤假。和C語言的函數(shù)類似栏饮,但語法截然不同。
方法的聲明
位置:寫在類聲明里的屬性大括號后面磷仰,@end前面
無參數(shù)語法:- (返回值類型)方法名;
有參數(shù)語法:- (返回值類型)方法名:(參數(shù)類型)參數(shù)名稱;
多個參數(shù)語法:- (返回值類型)方法名:(參數(shù)類型)參數(shù)名稱 方法名:(參數(shù)類型)參數(shù)名稱 方法名:(參數(shù)類型)參數(shù)名稱;
@interface Person : NSObject
{
NSString *_name;
}
//聲明無參數(shù)的方法
- (void)sayHi;
//聲明一個參數(shù)的方法
- (void)eatWith:(NSString *)foodName;
//聲明多個參數(shù)的方法
- (int)getSumWithNum1:(int)num1 andNum2:(int)num2;
@end
方法的實現(xiàn)
位置:寫在類實現(xiàn)里@end前面
無參數(shù)語法:- (返回值類型)方法名{方法體}
有參數(shù)語法:- (返回值類型)方法名:(參數(shù)類型)參數(shù)名稱{方法體}
多個參數(shù)語法:- (返回值類型)方法名:(參數(shù)類型)參數(shù)名稱 方法名:(參數(shù)類型)參數(shù)名稱 方法名:(參數(shù)類型)參數(shù)名稱{方法體}
@implementation Person
//實現(xiàn)無參數(shù)的方法
- (void)sayHi{
//在方法的實現(xiàn)中袍嬉,無需創(chuàng)建對象可以直接訪問類的成員變量
NSLog(@"我的名字是:%@",_name);
}
//實現(xiàn)一個參數(shù)的方法
- (void)eatWith:(NSString *)foodName{
NSLog(@"吃%@",eatFood);
}
//實現(xiàn)多個參數(shù)的方法
- (int)getSumWithNum1:(int)num1 andNum2:(int)num2{
return num1 + num2;
}
@end
方法的調(diào)用
無參語法:[對象名 方法名];
有參語法:[對象名 方法名:實參];
多個參數(shù)語法:[對象名 方法名:實參 方法名:實參 方法名:實參];
//實例化一個對象
Person *person = [Person new];
//給對象的_name屬性賦值
person -> _name = @"好玩";
//調(diào)用無參數(shù)的方法。有些屌絲也稱:向person對象發(fā)送了一條sayHi消息
[person sayHi];
//調(diào)用一個參數(shù)的方法
[person eatWith:@"包子"];
//調(diào)用多個參數(shù)的方法
int result = [person getSumWithNum1:10 andNum2:20];
NSLog(@"result = %i",result);
注意:
1.有參方法的方法名也包括:芒划,每個冒號后面就是一個參數(shù)冬竟,有多少個參數(shù)就有多少個冒號。
2.在主函數(shù)調(diào)用方法必須要通過實例化一個對象來調(diào)用(后面還會學(xué)類方法民逼,先不考慮)泵殴。
3.多個參數(shù)的方法,方法名命名要規(guī)范拼苍。建議使用with和and來拼接方法名笑诅,要讓調(diào)用者知道這個參數(shù)有何作用,一目了然疮鲫。
4.同一個類可以創(chuàng)建N多個對象吆你,對象與對象互不影響(一個對象實例變量的值對另一個對象毫無關(guān)系)。
5.哪個對象調(diào)用的方法俊犯,方法中的成員變量就是訪問那個對象的成員變量的值妇多。
6.如果成員變量的類型是基本類型,默認(rèn)值是0燕侠,是指針類型就默認(rèn)值是nil者祖。