標籤:objective-c objective-c學習 oc oc中的類
首先,我要說的是,想要學好Objective-C(以下簡稱OC)就必須要有C語言的基礎,因為OC是C語言的一個超集;OC是面向過程的語言.[C語言是物件導向的語言],OC中的好多文法和C語言中類似,OC也完全可以相容C語言,實現混編;所以想學好OC,最好是有C語言的基礎。(如果有C++的基礎或者思想,就更能學好OC)
1.OC中檔案都是以.m的檔案儲存體的,聲明檔案同c一樣也是.h檔案;
個人提醒:不管是C還是OC最好都要用駝峰標識來些標識符;
建立類:
類名:首字母一般都是大寫;
定義類的步驟: 1,定義類名;2,編寫類的屬性--->(執行個體變數) ;3,編寫類的行為--->方法;
提示:一般類名最好與檔案名稱一樣,方便程式員們的理解;一般類下的屬性聲明 用底線開頭,原因是這裡聲明的是全域變數,方便與局部變數中的關鍵詞重名;這裡只能聲明變數,不能賦值;
方法的定義:
-(void)method : (int) arguments;
-(方法類型:執行個體方法,也叫對象方法)
+(類方法)
(void)返回值;沒有返回值是void;
method 方法名;
(int《類型》):參數類型括起來;
arguments:參數名;
-------
方法定義分為:不帶參數:如-(void)shoping;
帶一個參數:void(shoping):(float)price;
帶兩個參數:void(shopping):(float)price :(float)weight;
-----------------------------
方法的實現:在.m中@implementation
//在這裡寫方法的實現;
-(void)shopping:(float)price{
NSLog(@"我正在shopping!");
}
@end;
然後在main函數中應用
#import "Person.h"
int main(){
//通過類名建立對象;
//Person *person = [Person alloc];
//person = [person init];
//alloc 是在記憶體中申請一塊空間地區,來存放此對象的資訊;
//下邊調用init方法初始化一些預設資料;
Person *person = [[Person alloc] init];//將兩個步驟嵌套在一起;
//左邊是【通過類類型】聲明變數;右邊是建立對象;
} ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//上節:定義類;用類建立對象;
-——————————————
還有一種建立對象方法:
Person * person2 =[Person new];(OC中不建議使用這種方式)
一般使用這種方式:Person *person1=[[Person alloc] init];
_______________________
調對象裡的方法;
-開頭的為:執行個體方法【或叫對象方法】; +:類方法;
-開頭的必須有對象;(如person1)
在main中執行到此↓:
[person1 shopping:200];//200為參數
就會進入到shopping函數中;
//這就是調用了這個shopping這個執行個體方法;執行個體方法必須有對象才能調用;
//通過類能建立很多方法出來;
----------------------------------
建立完對象person1;
設定名字和年齡;
沒有辦法直接設定名字和方法,只能通過方法來設定屬性;
設定名字方法:-(void)setName:(NSString *)name;//方法描述:設定屬性 name;
實現:在.m檔案中:
-(void)setName:(NSString *)name{
_name = name;
}
----------------------------------
再回到main中設定名字:
[person1 setName:@"張三"];//把張三字串傳入到name函數中,name再把張三傳給_name;
-----------------------------------
屬性:又叫成員變數,又叫全域變數,又叫執行個體變數;全域變數所有的方法中都能用;
————————————————
專門設定屬性的方法:叫做設定器方法或者叫set方法;
在外部擷取屬性的方法:叫做擷取器方法(get方法);有返回值;
-----------------------------------
比如-(NSString *)name;
-(NSInteger)age;
實現:
-(NSString *)name{
return _name;
}
-(NSInteger)age{
return _age;
}
調用:NSString *name1 = [person1 name]
+++++++++++++++++++++++++++++++++++++++++++++
之前都是一個參數的方法;今天學多個參數的方法;
—————————————————
-(void)setName:(NSString *)name setAge:(NSInteger *)age;//《方法名有兩個部分:setName和setAge》;setAge在這裡可以省掉(但是不推薦用);
實現:-(void)setName:(NSString *)name setAge:(NSInteger *)age{
_name = name;
_age = age;
}//一般不會這樣定義,這裡只是用於示範;一般都是一個變數定義一個設定方法;
調用:[person1 setName:@"張三" setAge:22];【對象調用方法!】
————————————————
【在.m和.h間切換】command+cotrl+上下鍵;tab鍵能補全我們為寫完的關鍵字或標識符;
————————————————
方法類型:-對象方法, +類方法;
+:類方法
用類名去調方法;稱之為類方法;
方法描述:是用於建立一個Person對象的;
定義類方法:+(Person *)newPerson;
實作類別方法:+(Person *)newPerson{
Person *p = [[Person alloc] init];
//這裡可以初始化一些變數
//[p setName:@"zhangsan" setAge:22]
}
調用類:Person *person3 = [Person newPerson];
--------------------------------
如果沒有建立對象,就不能使用屬性;
執行個體對象都沒有,哪兒來的屬性?
要想使用,必須要有對象;
//在類方法中無法訪問屬性;
屬性:誰調的方法 屬性就屬於誰;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
補充對象的建立;
建立一個對象的時候,裡面的成員變數並沒有初始化,那它們預設是什麼呢?
@interface Person :NSObject
int _Age;
//系統預設為其初始化為:Byte:0;short:0;int:0;long 0L;char:\u0000‘ ;float:0.0F;double:0.0D;Bollean:FALSE;所有指標:nil;
@end
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++