IOS基礎之 (四) OC對象,ios基礎oc對象
一 建立一個OC的類
完整的寫一個函數:需要函數的聲明和定義。
完整的寫一個類:需要類的聲明和實現。
1.類的聲明
聲明對象的屬性和行為
1 #import <Foundation/Foundation.h> 2 3 @interface Car : NSObject 4 { 5 @public 6 int speed;//速度 7 int wheels;//輪子 8 } 9 10 - (void) initSpeed:(int)speed withWheels:(int) wheels ;11 12 - (void) run;13 14 @end
第3行:NSObject目的是讓Car這個類具備建立對象的能力。
第5行:@public 可以讓外部的指標間接訪問對象內部的成員變數。
第 6,7行:定義對象的屬性。
第10行:定義一個有入參的行為。
第12行:定義對象的行為。只要是OC對象的方法,必須以減號 - 開頭。
在OC方法傳回值中任何資料類型都必須用小括弧()擴中。
實現@interface中聲明的方法。
2.類的實現
Car 類的實現。
1 #import "Car.h" 2 3 @implementation Car 4 5 - (void)run{ 6 NSLog(@"車子跑起來。車速是%d km/h,輪子數是%d", speed, wheels ); 7 } 8 9 - (void)initSpeed:(int)speed withWheels:(int)wheels{10 self -> speed = speed;11 self -> wheels = wheels;12 }13 14 @end
第9行代碼: 給對象的屬性speed, wheels賦值初始值。不能在類的聲明 @interface 中對屬性就行初始化。
在xcode中,自動實現函數的實現:
輸入 "-" , 然後輸入函數的頭幾個字母,選中xcode自動彈出的方法。
3.類的調用
1 #import <Foundation/Foundation.h> 2 #import "Car.h" 3 4 int main(int argc, const char * argv[]) { 5 Car *car = [Car new]; 6 car -> wheels = 4; 7 car -> speed = 100; 8 [car run]; 9 10 [car initSpeed:200 withWheels:5];11 [car run];12 13 14 return 0;15 }
第5行:在OC中,想執行一些行為,就接上一個中括弧[行為執行者 行為名稱] 。利用類來建立對象。
[Car new]會建立出一個新對象,並且會返回新對象本身(新對象的地址)。
第6,7行:給 car所指向對象的wheels,speed屬性賦值。
第8行:給car所指向的對象發送一條run訊息。
二對象與函數參數例子1
1 #import <Foundation/Foundation.h> 2 #import "Car.h" 3 4 void test1(Car *newC){ 5 newC -> wheels = 5; 6 } 7 8 9 int main(int argc, const char * argv[]) {10 Car *car = [Car new];11 car -> wheels = 4;12 car -> speed = 100;13 [car run];14 15 test1(car );16 [car run];17 18 return 0;19 }
第16行代碼的返回結果為:車子跑起來。車速是100 km/h,輪子數是5
記憶體配置圖如下:
例子2
1 #import <Foundation/Foundation.h> 2 #import "Car.h" 3 4 void test2(Car *newC){ 5 Car *c2 = [Car new]; 6 c2 -> wheels = 5; 7 c2 -> speed =300; 8 9 newC = c2;10 newC -> wheels = 7;11 }12 13 int main(int argc, const char * argv[]) {14 Car *car = [Car new];15 car -> wheels = 4;16 car -> speed = 100;17 [car run];18 19 test2( car );20 [car run];21 22 return 0;23 }
第20行代碼的返回結果為 車子跑起來。車速是100 km/h,輪子數是4
記憶體配置圖如下:
物件導向封裝的好處:
1)更加接近人類的思考方式。
2)只需要關注對象,不需要關注步驟。