首先,我要說的是,想要學好Objective-C(以下簡稱OC)就必須要有C語言的基礎,因爲OC是C語言的一個超集;OC是面向對象的語言.[C語言是面向過程的語言],OC中的好多語法和C語言中類似,OC也完全可以兼容C語言,實現混編;所以想學好OC,最好是有C語言的基礎。(如果有C++的基礎或者思想,就更能學好OC)
1.OC中文件都是以.m的文件存儲的,聲明文件同c一樣也是.h文件;
個人提醒:不管是C還是OC最好都要用駝峯標識來些標識符;
創建類:
類名:首字母一般都是大寫;
提示:一般類名最好與文件名一樣,方便程序員們的理解;一般類下的屬性聲明 用下劃線開頭,原因是這裏聲明的是全局變量,方便與局部變量中的關鍵詞重名;這裏只能聲明變量,不能賦值;
方法的定義:
-(void)method : (int) arguments;
-(方法類型:實例方法,也叫對象方法)
+(類方法)
(void)返回值;沒有返回值是void;
method 方法名;
(int《類型》):參數類型括起來;
arguments:參數名;
-------
方法定義分爲:不帶參數:如-(void)shoping;
帶一個參數:void(shoping):(float)price;
帶兩個參數:void(shopping):(float)price :(float)weight;
-----------------------------
//在這裏寫方法的實現;
-(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