OC初步認識
一 , 瞭解面向對象和麪向過程的思想區別
1,面向過程編程(Procedureoriented Programming, POP ): 以事件爲中心,關係完成該事件的詳細步驟,一步一步實現
2, 面向對象編程(Object Oriented Programming, OPP);: 以事務爲中心,也就是參與事件的參與者,設計事物的功能,而完成事件只是事物的所有功能中的一個小功能
二, 類 和 對象 是什麼
類: 具有相同特徵和相同行爲的事物的抽象,類是一個抽象概念,在生活中不具體,並且,在OC裏只有一個類沒有根類,即NSObject,其他的類都有父類,根類
對象: 是類的實例,即類的具體表現,是具體的,生活中的萬物都是對象
描述一個類: 通過特徵(靜態屬性) 和行爲 (動態屬性,動作,功能)
三,具體類的定義要使用類的功能必須先定義類
定義類的分兩部分:
1, 類的接口部分:提供外部訪問接口,相當於使用說明書
1),類的接口部分寫在.h文件裏, 如定義一個名爲Person的類打開”.h”文件裏就有
@interface Student__1____ : NSObject
@end
定義:
(1),以@interface開頭@end結束,只有把類的接口定義內容寫在開始和結束之間纔有效
(2),@interface後的Student__1____是類名
(3),類名後的":"冒號表示繼承,表示該類是有父類
(4),:冒號後面的NSObject是父類名
2, 類的實現部分:相當於功能的實現
類的實現部分寫在.m文件中
類的實現部分: 打開”.m”文件裏就有
@implementation Student__1____
@end
(1),以@implementation 開頭,以@end結束,實現內容必須寫在中間纔有效
(2),@implementation 後跟上Student__1____是要實現的類(需要指定要對哪一個類做實現)
類的實現其實就是實現該類的方法
四,具體類的使用以及它與C語言不同的表達方式
我們可以舉個具體的例子更明確
寫一個學生類;名字爲Student__1____
以下均以學生類爲例,不再聲明
使用類
1,第一步
首先在”.h”文件裏寫類的接口部分(相當於C語言中函數的聲明,這樣想可以更容易理解)
1),先在大括號內定義實例變量
如: {
NSString *name;
NSString *sex;
NSInteger age;
}
其中實例變量必須寫在大括號之內,而且只能寫實例變量,對應描述一個類的特徵,(定義實例變量,相當於C語言中結構體中的結構體成員)
2) 定義類的接口,即方法的聲明,方法對應描述類的行爲 (OC的類的接口相當於C語言中函數的聲明)
在OC裏,整型用NSInteger,且在OC裏有字符串的類,所以定義一個字符串的變量有專門的關鍵字即NSString,NS是OC里語言的特點代表這是OC語言,另外就輸出方法與C語言的格式化輸出函數有所不同:
在C語言裏輸出用printf()函數 在OC裏用NSLog(@)方法輸出;括號的@不可少 @是OC語言的標誌
此外在C語言裏變量類型都用()小括號括起來
在以下出現的"+" 和"-"等到在main函數裏調用時再解釋
如:
(1),方法1,說自己的姓名,,性別,年齡
- (void)sayMyself;
方法名 sayMyself
(2),方法2,說自己的愛好
- (void)sayMyLove;
方法名 sayMyLove
(3),方法3,說自己的工資
- (NSInteger)saySalary:(NSInteger)money;
在OC裏如果方法有參數,那麼":"冒號也是方法名的一部分, 如果方法有多個參數,則需要加多個":"
如:該方法名爲:saySalary:
自定義初始化方法
- (id)initStudentname:(NSString *)aName sex:(NSString *)aSex num:(NSString*)aNum major:(NSString *)aMajor age:(NSInteger)aAge;
2,第二步
在”.m”文件寫類的實現部分(相當於C語言裏的函數的實現)
在OC裏輸出的數據類型爲字符串類型則用格式化說明符”%@”,並不是”%s”,其他的一般類型格式化說明符不變
如下;
(1),方法1,說自己的姓名,性別,年齡
- (void)sayMyself
{
NSLog(@"name:%@,sex:%@,%ld",name,sex,(long)age);
}
(2),方法2,說自己的愛好
-(void)sayMyLove
{
NSLog(@"我喜歡敲代碼??????");
}
(3),方法3,說自己的工資
-(NSInteger)saySalary:(NSInteger) money
{
return money;
}
3,第三步
OC中方法的調用採用消息發送機制即”[receiver message]”(中括號不能省略)(message)消息即方法, (receiver)消息的接收者 是類或者對象
在這裏可以解釋"+" 和"-"的作用: 區分消息給類還是對象發送消息用 "+" 和 "-" ,如果方法是一個"-"號方法,是給對象發送消息,如果是"+"號方法,則是給類發送消息
1),方法的調用需要創建對象
創建對象分爲兩步:
(1),開闢空間
通過[Student__1____ alloc] 在堆區開闢的空間纔是真正的對象,只不過對於指針變量per存儲着堆 區的首地址,通過它才能訪問對象,所有我們把指針變量stu1叫做對象,(真正的對象還是對區空間, stu1本質上是一個指針變量)
(2), 初始化(賦初值) init方法完成初始化操作"-" 號方法,對象調用
但是通常創建對象把兩步操作連起來寫
如爲學生類創建對象:
Student__1____ *stu1 [[[Student__1____ alloc] init]
在這裏init是系統定義的初始化方法,如果是整型,則初始化爲0,若爲字符串,則初始化爲nil(相當於C語言裏的NULL);
我們通常可以自定義初始化
如:
1)在”.h”文件裏寫接口
- (id)initStudentname:(NSString *)aName sex:(NSString *)aSex num:(NSString*)aNum major:(NSString *)aMajor age:(NSInteger)aAge;
“id”代表泛指類型,相當於C語言裏的”void *” ,對於字符串的類型說明符,必須是NSString + *;因爲它是指針類型
2)在”.m”文件裏寫初始化函數的實現
- (id)initStudentname:(NSString *)aName sex:(NSString *)aSex num:(NSString*)aNum major:(NSString *)aMajor age:(NSInteger)aAge;
{
name = aName;
sex = aSex;
num = aNum;
major = aMajor;
age = aAge;
return self;
}
在這裏self作用是誰調用該方法,self就是誰.
在寫方法時要知道,在+(類)方法中不能使用實例變量,實例變量是依託於對象存在的,只有有了對象,實例變量纔會有空間
如: 開闢空間時直接子自定義初始化
Student__1____ *stu1 = [[Student__1____ alloc]initStudentname:@"YangJunfang" sex:@"girl"num:@"541110010148" major:@"math" age:22];
言歸正傳,開闢空間後就可以調用方法了:
如下:
實現方法1,說自己的姓名,,性別,年齡
[stu1 sayMyself];
實現方法2, 說自己的愛好
[stu1 sayMyLove];
實現方法3,說自己的工資
NSInteger money = [stu1saySalary:10000];
輸出工資
NSLog(@"money =%ld",money);
在這裏需要定義一個整型的變量用來接收方法saySalary的返回值,因爲其返回值爲整型