Objective-C:03_物件導向-類和對象

來源:互聯網
上載者:User

標籤: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_物件導向-類和對象

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.