天天看點

[Object-C語言随筆之三] 類的建立和執行個體化以及函數的添加和調用!

    上一小節的随筆寫了常用的列印以及很基礎的資料類型的定義方式,今天就來一起學習下如何建立類與函數的一些随筆;

    首先類的建立:在Xcode下,菜單File-New File,然後出現選擇class模闆,如下圖(圖1)

<a target="_blank" href="http://blog.51cto.com/attachment/201107/144336478.jpg"></a>

圖1 class 模版選擇界面

     這裡不需要手動選擇什麼,,預設是Objective-C class模版,我們直接Next,出現以下視窗:(圖2) 

<a target="_blank" href="http://blog.51cto.com/attachment/201107/144351757.jpg"></a>

 圖2 為建立類起類名

     此視窗下,我們隻需要将類名填寫好就ok,直接點選”Finish“,這裡便于講解後續的代碼,這裡我将類名起名為”MyClass“

    點選”Finish“後,在我們的項目下會出現兩個檔案:

1. MyClass.m

2. MyClass.h

    接觸過c語言的很熟悉會生成兩個檔案,将一個類分為了兩個部分,簡單而言:

“.h”字尾的是此類聲明,比如變量、方法聲明都會在此檔案下定義—類定義部分;

“.m”檔案是書寫類方法的實作—類實作部分;

     ok,然後先看"MyClass.h"與“MyClass.h” 兩個檔案中自動生成的代碼: 

//以下為 MyClass.h 中的代碼:#import &lt;Foundation/Foundation.h&gt;//    @interface:表示類接口部分//    NSObject @interface MyClass : NSObject {}//end 辨別結束類接口部分@end//以下為 MyClass.m 中的代碼:#import "MyClass.h"//  @implementation:表示類實作部分@implementation MyClass//end 辨別結束類實作部分@end 

     下面我們簡單在MyClass類中添加幾個函數和變量,當然我這裡說的添加在實作上分為兩步:首先在.h類聲明檔案中進行函數聲明,然後在.m檔案下進行實作;代碼如下:

首先在MyClass.h 中定義:

#import &lt;Foundation/Foundation.h&gt;// @interface:表示類接口部分@interface MyClass : NSObject {int himiX,himiY;}//聲明兩個帶有傳回值的函數-(int) getX;-(int) getY;//聲明兩個無傳回值但有一個參數的函數-(void) setX:(int) x;-(void) setY:(int) y;//聲明一個無傳回值,但有兩個參數的函數-(void) setXY:(int) x andSetXY:(int) y;//end 辨別結束類接口部分@end 

     定義了兩個整型以及四個函數,函數的種類分為以下四種:

    1. 帶傳回值的函數

    2. 不帶傳回值的函數

    3.有一個參數的函數

    4.有兩個(多個)參數的函數

 然後在MyClass.m中實作這些函數:

#import "MyClass.h"//   @implementation:表示類實作部分@implementation MyClass//----以下是聲明的函數一一執行個體的代碼-(int) getX{return himiX;}-(int) getY{return himiY;}-(void) setX:(int) x{himiX=x;}-(void) setY:(int) y{himiY=y;}-(void) setXY:(int) x andSetXY:(int) y{himiX =x;himiY =y;}//end 辨別結束類實作部分@end 

關于函數定義有兩點需要詳細說明:

    1.關于“-”符号表示的方法類型其詳細含義指的是 :執行個體方法;

    如果是“+”符号表示:這個函數是一個類函數,表明其他代碼可以直接調用的類方法;不用建立其類的執行個體;

    2.關于多個參數參數定義:當想聲明一個有多個參數的方法時,我們可以了解目前這個方法的方法名被分為多個部分;

    比如有兩個參數,那麼整個方法的名字可以認為此函數的名字将被分為兩部分;三個參數的函數,其函數名就有三個部分...

    那麼為了便于識别是一個函數中的名字部分,是以當參數有多個時,名字的命名規則可以按照如下這樣:

例如這裡定義了一個三個參數的函數:

方法名的第一部分:getHimi 第二部分 getHimiTwo 第三部分 ThreeGetThree

    當然這裡我是想告訴大家,多個參數的函數中,每一部分的函數名盡可能有規律可循即可,便免與其他函數名混淆;

     ok,類設計完畢之後,下面我們在程式主函數中,執行個體此類對象,并調用其函數,代碼如下:

#import &lt;Foundation/Foundation.h&gt;#import "MyClass.h"int main (int argc, const char * argv[]) {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];//-----------//執行個體類對象MyClass *mc =[[MyClass alloc]init];//調用帶有傳回值的函數int x = [mc getX];int y = [mc getY];NSLog(@"x = %i,y = %i",x,y);//調用無傳回值且帶有一個參數的函數[mc setX:8];[mc setY:23];x = [mc getX];y = [mc getY];NSLog(@"x = %i,y = %i",x,y);//調用無傳回值且帶有兩個(多個)參數的函數[mc setXY:9 andSetXY:22];x = [mc getX];y = [mc getY];NSLog(@"x = %i,y = %i",x,y);[mc release];//-----------[pool drain];return 0;} 

 類的執行個體化:

如上一段代碼中對MyClass類的執行個體化的代碼:

MyClass *mc =[[MyClass alloc]init];

[[MyClass alloc]init] 中的 alloc 是固定格式,是為對象申請記憶體空間, init則完成對象的初始化工作;

方法(函數的調用):

首先我們通過執行個體化了一個MyClass對象-mc,然後通過mc調用其類中的函數:

有傳回值并且無參數的函數調用:

變量 = [執行個體 方法名];

沒傳回值且有一個參數的函數調用:

[執行個體 方法名:參數] ;

沒傳回值且有兩個(多個)參數的函數調用:

[執行個體 方法名(第一部分):參數1 方法名字(第二部分):參數2];

     ok,然後觀察運作項目的結果: 

<a target="_blank" href="http://blog.51cto.com/attachment/201107/144614575.jpg"></a>

     ok,此小節就是這些,下面附上源碼下載下傳把:仍然免費共享~希望大家多多支援~

本文轉自 xiaominghimi 51CTO部落格,原文連結:http://blog.51cto.com/xiaominghimi/607036,如需轉載請自行聯系原作者

繼續閱讀