OC—基礎語法

學習目標

1.【了解】Objective-C語言簡介

2.【掌握】第一個OC程序

3.【掌握】OC中的字符串

4.【熟悉】OC中的一些玩意

5.【了解】面向過程與面向對象

6.【掌握】類的聲明和實現

7.【掌握】類的方法

一、Objective-C語言簡介

Objective-C簡稱Obj-C或者OC,Objective的意思就是面向對象的。OC其實就是在C語言的基礎之上,封裝了一層面向對象的語法,他并不是一門全新的編程語言。OC是Mac OS X系統和iOS系統的主要開發編程語言,當然馬上要被Swift給替代了,然并卵,我們還是得好好學習OC,因為現在大多數公司還是使用OC來做iOS開發。

二、第一個OC程序

OC程序的后綴和入口

C程序的源文件的后綴名為.c,OC程序的源文件是后綴名為.m,m就是message的意思。因為OC是完全兼容C語言的,所以在.m文件之中是可以寫任意的C代碼。并且OC中main函數仍然是OC程序的入口,作用和C語言中的是一樣的,這里就不贅述了。

#import指令

他是一個增強版的#incluce指令,并且用法和#include指令的用法相同。并且#import在包含文件的時候會先判斷這個文件是否已經被包含,如果沒有被包含就包含,如果已經被包含,就算了。

框架

蘋果或者第三方事先將一些牛逼(常用)的功能寫好,把這些功能模塊封裝在一個一個類之中,把這些功能提供給大家用。這些類的集合就叫做框架,說白了就是一個功能集合。

Foundation框架

提供了一些OC最基礎的功能。Foundation.h這個文件中包含了所有Foundation框架中的頭文件,#import 就相當于包含了所有Foundation框架的頭文件。

@autoreleasepool

他是一個自動釋放池,管理內存的,到時候再扯。

NSLog函數

是printf函數的增強版,作用也是向控制臺輸出信息。

1.NSLog輸出完畢信息之后會默認加一個\n,如果我們手動加了一個\n,NSLog的自動換行就會失效。

2.在輸出信息的同時還會輸出一些與程序有關的其他信息(系統時間、程序名、進程ID、線程ID)。

3.NSLog函數支持printf函數的全部格式控制符,其用法也相同。

4.NSLog函數的字符串參數前面必須要加一個@符號,這是OC里的字符串格式。

5.NSLog可以使用%@格式控制符輸出對象,而printf不能輸出對象。

6.NSLog函數的第一個參數是NSString類型的指針,所以必須給一個OC字符串。

三、OC中的字符串

C語言使用字符數組和字符指針的方式來存儲字符串,OC中專門設計了一個新的數據類型(NSString)來保存字符串。我們無需關心內部是如何實現的,只要會使用就行了,相對于C語言中的字符串,它更易用更方便。

注意:

1.OC中的字符串常量必須加一個@前綴,寫在雙引號外面。比如

@"zhoujianfeng"

2.OC的字符串常量使用NSString類型的指針變量來保存地址。比如

NSString *str = @"zhoujianfeng";

3.NSString類型的指針變量只能保存OC字符串地址。不能

NSString *str = "zhoujianfeng";//這種是錯誤的

4.使用%@格式控制符輸出NSString類型的字符串。比如

NSLog(@"%@",str);

四、OC中的一些玩意

NS前綴:為了區分這些東西的前身是NeXTStep,就為他們加了一個前綴NS。

@符號:將C語言的字符串轉換為OC的字符串,"zhou" 加了就成 @"zhou"。OC中新增的關鍵字絕大部分都是以@開頭。

OC支持C中的所有數據類型,并且在此基礎之上新增了一些數據類型。比如BOOL類型、Boolean類型、id類型、class、SEL類型、nil、block代碼塊等等。

五、面向過程與面向對象

面向過程:

遇到一個需求的時候,實現這個需求的過程、步驟都是自己親自去做。(執行者)與底層交互效率很高。

面向對象:

遇到一個需求的時候,實現這個需求的過程、步驟自己不做,而是去找一個專門做這個事情的人來做。(指揮者)后期程序的維護和擴展非常的方便,如果功能發生變化,我們只需要換一個人就行了。

六、類的聲明和實現

015-OC基礎語法-OC筆記

對象是生活中看得見、摸得著、具體存在的個體。而類則是對一群具有相同特征、行為的事物的統稱。

類的三要素:

類名:這類事物叫做什么名字

成員變量:這類事物具有相同的特征

方法:這類事物具有相同的行為

類的聲明語法:

@interface 類名 : 父類名

{

//實例變量

}

//方法的聲明

@end

類的實現語法:

@implementation 類名

//方法的實現

@end

注意:

1.類的聲明一定要在類的實現前面,并且是直接寫在源文件中,不能寫到main函數中。

2.類名的每一個單詞的首字母大寫,類名和NSObject之間是:號,實例變量名必須要以下劃線開頭。

3.類分為類的聲明和類的實現兩部分,缺一不可,并且都以@end結尾。

簡單案例:

#import

//類的聲明

@interface Person : NSObject

{

@public

NSString *_name;

int _age;

float _height;

float _weight;

}

@end

//類的實現

@implementation Person

@end

//main主函數

int main(int argc, const char * argv[]) {

@autoreleasepool {

Person *person = [Person new];

//因為這些實例成員的訪問權限是@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;

}

七、類的方法

我們都知道類是一群具有相同的屬性、相同的行為的事物統稱,在這里說的行為就是類的方法(有些屌絲也叫函數)。和C語言的函數類似,但語法截然不同。

方法的聲明

位置:寫在類聲明里的屬性大括號后面,@end前面

無參數語法:- (返回值類型)方法名;

有參數語法:- (返回值類型)方法名:(參數類型)參數名稱;

多個參數語法:- (返回值類型)方法名:(參數類型)參數名稱 方法名:(參數類型)參數名稱 方法名:(參數類型)參數名稱;

@interface Person : NSObject

{

NSString *_name;

}

//聲明無參數的方法

- (void)sayHi;

//聲明一個參數的方法

- (void)eatWith:(NSString *)foodName;

//聲明多個參數的方法

- (int)getSumWithNum1:(int)num1 andNum2:(int)num2;

@end

方法的實現

位置:寫在類實現里@end前面

無參數語法:- (返回值類型)方法名{方法體}

有參數語法:- (返回值類型)方法名:(參數類型)參數名稱{方法體}

多個參數語法:- (返回值類型)方法名:(參數類型)參數名稱 方法名:(參數類型)參數名稱 方法名:(參數類型)參數名稱{方法體}

@implementation Person

//實現無參數的方法

- (void)sayHi{

//在方法的實現中,無需創建對象可以直接訪問類的成員變量

NSLog(@"我的名字是:%@",_name);

}

//實現一個參數的方法

- (void)eatWith:(NSString *)foodName{

NSLog(@"吃%@",eatFood);

}

//實現多個參數的方法

- (int)getSumWithNum1:(int)num1 andNum2:(int)num2{

return num1 + num2;

}

@end

方法的調用

無參語法:[對象名 方法名];

有參語法:[對象名 方法名:實參];

多個參數語法:[對象名 方法名:實參 方法名:實參 方法名:實參];

//實例化一個對象

Person *person = [Person new];

//給對象的_name屬性賦值

person -> _name = @"好玩";

//調用無參數的方法。有些屌絲也稱:向person對象發送了一條sayHi消息

[person sayHi];

//調用一個參數的方法

[person eatWith:@"包子"];

//調用多個參數的方法

int result = [person getSumWithNum1:10 andNum2:20];

NSLog(@"result = %i",result);

注意:

1.有參方法的方法名也包括:,每個冒號后面就是一個參數,有多少個參數就有多少個冒號。

2.在主函數調用方法必須要通過實例化一個對象來調用(后面還會學類方法,先不考慮)。

3.多個參數的方法,方法名命名要規范。建議使用with和and來拼接方法名,要讓調用者知道這個參數有何作用,一目了然。

4.同一個類可以創建N多個對象,對象與對象互不影響(一個對象實例變量的值對另一個對象毫無關系)。

5.哪個對象調用的方法,方法中的成員變量就是訪問那個對象的成員變量的值。

6.如果成員變量的類型是基本類型,默認值是0,是指針類型就默認值是nil。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容