上一小節的随筆寫了常用的列印以及很基礎的資料類型的定義方式,今天就來一起學習下如何建立類與函數的一些随筆;
首先類的建立:在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 <Foundation/Foundation.h>// @interface:表示類接口部分// NSObject @interface MyClass : NSObject {}//end 辨別結束類接口部分@end//以下為 MyClass.m 中的代碼:#import "MyClass.h"// @implementation:表示類實作部分@implementation MyClass//end 辨別結束類實作部分@end
下面我們簡單在MyClass類中添加幾個函數和變量,當然我這裡說的添加在實作上分為兩步:首先在.h類聲明檔案中進行函數聲明,然後在.m檔案下進行實作;代碼如下:
首先在MyClass.h 中定義:
#import <Foundation/Foundation.h>// @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 <Foundation/Foundation.h>#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,如需轉載請自行聯系原作者