李華明Himi 原創,轉載務必在明顯處註明:
上一小節的隨筆寫了經常使用的打印以及很基礎的數據類型的定義方式,今天就來一塊兒學習下如何建立類與函數的一些隨筆;css
首先類的建立:在Xcode下,菜單File-New File,而後出現選擇class模板,以下圖(圖1)html
圖1 class 模版選擇界面函數
這裏不須要手動選擇什麼,,默認是Objective-C class模版,咱們直接Next,出現如下窗口:(圖2)學習
圖2 爲新建類起類名spa
此窗口下,咱們只須要將類名填寫好就ok,直接點擊」Finish「,這裏便於講解後續的代碼,這裏我將類名起名爲」MyClass「.net
點擊」Finish「後,在咱們的項目下會出現兩個文件:設計
1. MyClass.mcode
2. MyClass.hhtm
接觸過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,而後觀察運行項目的結果:
ok,此小節就是這些,下面附上源碼下載把:仍然免費共享~但願你們多多支持~
源碼下載地址: http://www.himigame.com/himistudy/396.html
.
.