標籤:style blog http color io os 使用 ar strong
OC中只能使用指標變數來間接操作對象 類的聲明使用的關鍵字是@interface
@interface 類名 @end
結尾的@end表示類聲明結束
類的實現使用的關鍵字是@implementation
@implementation 類名 @end
結尾需要加上@end,告訴編譯器類實現完畢
/*
類名:Car 屬性:輪胎個數、時速(速度) 行為:跑*///完整的寫一個函數:函數的聲明和定義(實現)//完整的寫一個類:類的聲明和實現 //1、類的聲明//:Car繼承自NSObject類,目的是讓Car這個類具備建立對象的能力(這個類在Foundation架構中)#import <Foundation/Foundation.h>@interface Car:NSObject{ //用來聲明對象屬性(
成員變數(也成為執行個體變數 instance variable),預設會初始化為0)
@public //將後面的所有的屬性的存取層級變成public,可以讓外部的指標間接訪問對象內部的成員變數 int wheels;//輪胎個數 int speed;//時速}//方法(行為):方法名、參數、傳回值(方法也分聲明、實現兩部分)
//只要是OC對象的方法,必須以減號(-)開頭
//OC方法中任何資料類型都必須用小括弧() 括住
//OC方法中的小括弧():括住資料類型
- (void) run;@end //2、類的實現(就是寫方法的實現)@implementation Car //方法的實現(說清楚方法裡面有什麼代碼)- (void) run{ NSLog(@"車子跑起來了");}@end int main(){ //
在OC中想執行一些行為,就寫上一個中括弧[行為執行者 行為名稱] //利用類來建立對象 //執行了Car這個類的new行為來建立新對象
//定義了一個指標變數p(左邊的*不能省略)。p將來指向的是Car類型的對象
//[Car new]每次都會建立出一個新對象,並且會返回新對象本身(新對象的地址)
Car *p=[Car new]; Car *p2=[Car new]; p2->wheels=5; p2->speed=300;
//給p所指向對象的wheels屬性賦值
p->wheels=4; p->speed=250; //給p所指向對象發送一條run訊息 [p run]; NSLog(@"車子有%d個輪子,時速為:%dkm/h",p->wheels,p->speed); return 0;} Person *p=[Person new];Person *p2=p;指標之間的賦值傳遞的是指標儲存的地址,相當於C#中的引用傳遞
OC中類在記憶體中也占空間(在使用類建立對象之前,會將類載入進記憶體-只會載入一次)
而且OC中每個對象預設都有一個指標isa,指向建立對象的類 常見錯誤 只有類的聲明,沒有類的實現 漏了@end @interface和@implementation嵌套(兩個類的聲明和實現不能嵌套) 兩個類的聲明嵌套 成員變數沒有寫在括弧裡面 方法的聲明卸載了大括弧裡面
成員變數必須寫在類中的大括弧中,並且不能重名和初始化,而且不能在前面加上static等
類的聲明必須放在前面(使用之前),實現部分可以放在後面 方法和函數的區別: 對象方法都是以減號開頭(-) 對象方法的實現只能寫在@implementation和@end之間 對象方法的聲明必須寫在@interface和@end之間 對象方法只能由對象來調用 對象方法歸類\對象所有 函數能寫在檔案中的任意位置(不能寫在類的聲明部分@interface和@end中間),函數歸檔案所有 函數調用不依賴於對象 函數內部不能直接通過成員變數訪問某個對象的成員變數
如果在類的聲明中有方法的聲明,但是在實現的時候寫成了函數,那麼就會認為沒有實現這個方法。
方法的聲明與實現:
//OC方法中,一個參數對應一個冒號(冒號前面可以寫點描述的東西) - (int) pingFang:(int) num;//
方法名叫:
pingFang:(冒號也算在方法名之內) 兩個參數 - (int) sum:(int)num1 :(int)num2; 調用的時候: int a=[jsq sum:10 :5];
推薦寫法:
- (int) sumWithNum1:(int)num1 andNum2:(int)num2;//方法名:sumWithNum1:andNum2:
int a=[jsq sumWithNum1:10 andNum2:20]; 多個參數也這麼寫 冒號也是方法名的一部分 在同一個類中不允許兩個對象方法同名 方法名: 方法調用: 多個參數的方法聲明: 多個參數的方法的調用: 匿名對象:
不要寫類似的匿名對象這樣的代碼(會造成記憶體流失):
只要求能說出輸出的結果
[Car new]->speed=300;
[[Car new] run];
ios文檔: 安裝方法1:將docset檔案放到/Xcode.app/Contents/Developer/Documentation/DocSets路徑下 安裝方法2:放到硬碟某個路徑 /Users/pcbeta/Library/Developer/Shared/Documentation/DocSets 如有不對的地方還請大家指正!!
Objective-C:03_物件導向-類和對象