[?李華明Himi?](http://www.himigame.com/about-himi)原創,轉載務必在明顯處注明:
轉載自[【黑米GameDev街區】](http://www.himigame.com/)?原文鏈接:?[http://www.himigame.com/himistudy/396.html](http://www.himigame.com/himistudy/396.html "[Object-C語言隨筆之三]")
[](http://blog.csdn.net/xiaominghimi/archive/2011/06/24/6565870.aspx)
上一小節的隨筆寫了常用的打印以及很基礎的數據類型的定義方式,今天就來一起學習下如何創建類與函數的一些隨筆;
首先類的創建:在Xcode下,菜單File-New File,然后出現選擇class模板,如下圖(圖1)

圖1 class 模版選擇界面
這里不需要手動選擇什么,,默認是Objective-C class模版,我們直接Next,出現以下窗口:(圖2)

圖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,然后觀察運行項目的結果:

ok,此小節就是這些,下面附上源碼下載把:仍然免費共享~希望大家多多支持~
源碼下載地址:?[http://www.himigame.com/himistudy/396.html](http://www.himigame.com/himistudy/396.html "[Object-C語言隨筆之三]")[](http://download.csdn.net/source/3407625)
- 前言
- 【Iphone 游戲開發】游戲引擎剖析
- [Object-C語言隨筆之一]Mac os 下搭建iOS開發環境
- [Object-C語言隨筆之二] 《NSLog》常用的打印調試語句與自動排版
- [Object-C語言隨筆之三] 類的創建和實例化以及函數的添加和調用!
- [Object-C語言隨筆之四]創建視圖并繪制簡單圖形
- 【iOS-Cocos2d游戲開發之一】搭建cocos2d游戲引擎環境HelloWorld!
- 【iOS-Cocos2d游戲開發之二】Cocos2D 游戲開發資源貼(教程以及源碼)
- 【iOS-Cocos2d游戲開發之三】CCScene切換的所有特效(28種)以及設置屏幕橫豎屏!
- 【iOS-Cocos2d游戲開發之四】獨自收集Cocos2d提供的字體!共57種(有對照的字體圖)
- 【iOS-Cocos2d游戲開發之五】多觸點與觸屏事件詳解(單一監聽、事件分發)【11月28日更新】
- 【iOS-Cocos2d游戲開發之六】對觸屏事件追加講解,解決無法觸發ccTouchMoved事件[重要!]
- 【iOS-Cocos2d游戲開發之七】在cocos2d中添加/刪除系統組件,并解決View設置透明會影響View中的其他組件的問題!【11月28日更新解決添加組件Cocos2d動畫停止播放的BUG】
- 【iOS-Cocos2d游戲開發之八】開啟高清(960*640)模式問題與解答、圖片適配以及設置iphone橫豎屏
- 【iOS-Cocos2d游戲開發之九】講解CCSpriteBatchNode與TP工具的&quot;.pvr.ccz&quot;,&quot;.plist&quot;共用的終極精靈優化及注意事項!
- 【iOS-Cocos2d游戲開發之十】添加粒子系統特效并解決粒子特效與Layer之間的坐標問題;
- 【iOS-Cocos2d游戲開發之十一】使用Box2d物理系統以及在cocos2d框架添加Box2d物理系統lib包的方法
- 【iOS-Cocos2d游戲開發之十二】淺析使用C++/C/OC進行iOS游戲混編出現“failed with exit”問題與小結;
- 【iOS-Cocos2d游戲開發之十三】CCSprite利用Bezier(貝塞爾)做拋物線動作并讓CCSprite同時播放兩個Action動作!
- 【iOS-Cocos2d游戲開發之十四】音頻/音效/視頻播放(利用Cocos2D-iPhone-Extensions嵌入Cocos2d進行視頻播放!)
- 【iOS-Cocos2d游戲開發之十五】詳解CCProgressTimer 進度條并修改cocos2d源碼實現“理想”游戲進度條!
- 【iOS-Cocos2d游戲開發之十六】添加本地通知(UILocalNotification)以及添加系統組件滾動視圖(UIScrollView)!【2011年11月15日更新】
- 【iOS-Cocos2d游戲開發之十七】靈活使用精靈可視區域(TextureRect)與錨點(anchorPoint),并結合可視區域與錨點制作進度條!
- 【iOS開發必備指南合集】申請企業級IDP、真機調試、游戲接入GameCenter 指南(實現仿官方的成就提示)、游戲接入OpenFeint指南;
- 【iOS-Cocos2d游戲開發之十八】解決滾屏背景/拼接地圖有黑邊(縫隙)/動畫播放出現毛邊以及禁止游戲中自動鎖屏問題!【2011年12月18日補充】
- 【iOS開發必收藏】詳解iOS應用程序內使用IAP/StoreKit付費、沙盒(SandBox)測試、創建測試賬號流程!【2012-12-11日更新獲取&quot;產品付費數量等于0的問題&quot;】
- 【iOS-cocos2d-X 游戲開發之一】在Mac下結合Xcode搭建Cocos2d-X開發環境!
- 【iOS-cocos2d-X 游戲開發之二】【必看篇】總結闡述Cocos2d-X與Cocos2d-iphone區別;
- 【iOS-Cocos2d游戲開發之十九】游戲數據存儲的四種常用方式NSKeyedArchiver/NSUserDefaults/Write寫入/SQLite3
- 【iOS-Cocos2d游戲開發之二十】精靈的基礎知識點總匯(位圖操作/貼圖更換/重排z軸等)以及利用CCSprite與CCLayerColor制作簡單遮蓋層!
- 【iOS-Cocos2d游戲開發之二十一 】自定義精靈類并為你的精靈設置攻擊幀(指定開始幀)以及擴展Cocos2d源碼的CCAnimation簡化動畫創建!
- 【iOS-Cocos2d游戲開發之二十二 】CCSpeed實現CCAnimate動畫進行時設置慢動作以及設置游戲加減速進行(塔防游戲必備)!
- 【iOS-cocos2d-X 游戲開發之三】Mac下配置Android NDK環境并搭建Cocos2d-x環境并Eclipse正常編譯運行Cocos2dX自帶TestsDemo項目!
- 【iOS-cocos2d-X 游戲開發之四】Cocos2dX創建Android NDK新項目并編譯導入Eclipse中正常運行!
- 【iOS-cocos2d-X 游戲開發之五】游戲存儲之Cocos2dX自帶CCUserDefault類詳解;
- 【iOS-cocos2d-X 游戲開發之六】使用Base64算法對Cocos2dX自帶CCUserDefault游戲存儲數據編碼!
- 【iOS-cocos2d-X 游戲開發之七】整合Cocos2dX的Android項目到Xcode項目中,Xcode編寫&amp;編譯代碼,Android導入打包運行即可!
- 【iOS-iap防護】驗證用戶付費收據!拒絕iap Cracker!拒絕iap Free!讓iphone越獄用戶無從下手!【2012年5月2日更新防護iap Free的方法】
- 【COCOS2DX-LUA 腳本開發之一】在Cocos2dX游戲中使用Lua腳本進行游戲開發(基礎篇)并介紹腳本在游戲中詳細用途!
- 【iOS-cocos2d-X 游戲開發之九】Cocos2dx利用CCSAXParser解析xml數據&amp;CCMutableDictionary使用與注意!
- 【iOS-cocos2d-X 游戲開發之十】自定義CCSprite/Layer/CCNode及靜態類模版&amp;自定義類細節說明&amp;Cocos2dx觸屏事件講解
- 【iOS-cocos2d-X 游戲開發之十一】New CCSprite()帶來的錯誤&amp;使用CCUserDefault及pvr.ccz在Cocos2dx中要注意!
- 【iOS-cocos2d-X 游戲開發之十二】自定義Cocos2dx搖桿(增強Joystick),增加搖桿跟隨用戶觸點作為搖桿坐標,讓搖桿不再死板!
- 【iOS-cocos2d-X 游戲開發之十三】詳細講解在Xcode中利用預編譯并通過Jni調用Android的Java層代碼(cocos2dx里訪問調用Android函數)!
- 【iOS-cocos2d-X 游戲開發之十四】Xcode中c++&amp;Object-C混編,詳細介紹如何在cocos2dx中訪問object函數以及Apple Api
- 【iOS-cocos2d-X 游戲開發之十五】Cocos2dx中響應Android的Back(返回)與Menu(小房子)事件&amp;&amp;Cocos2dx自動釋放粒子內存函數!
- 【iOS-cocos2d-X 游戲開發之十六】配置你的Cocos2dx項目編譯后的Android自動使用(-hd)高清圖&amp;設置Android自適應屏幕、縮放比例方法!
- 【Cocoa(mac) Application 開發系列之四】動作編輯器(Cocos2dx)制作流程詳解及附上響應鼠標滾軸事件、反轉坐標系、導入/創建資源目錄等知識點代碼!
- 【Cocos2d-X(2.x) 游戲開發系列之一】cocos2dx(v2.x)與(v1.x)的一些常用函數區別講解!在2.x版CCFileData類被去除等
- 【Cocos2d-X(2.x) 游戲開發系列之二】cocos2dx最新2.0.1版本跨平臺整合NDK+Xcode,Xcode編寫&amp;編譯代碼,Android導入打包運行即可!
- 【Cocos2dX(2.x)_Lua開發之三】★重要必看篇★在Lua中使用自定義精靈(Lua腳本與自創建類之間的訪問)及Lua基礎講解
- 【Cocos2d-X(2.x) 游戲開發系列之三】最新版本cocos2d&#173;2.0&#173;x&#173;2.0.2使用新資源加載策略!不再沿用-hd、-ipad、-ipadhd添加后綴方式
- 【Cocos2d-X(1.x 2.x) 修復篇】iOS6 中 libcurl.a 無法通過armv7s編譯以及iOS6中無法正常游戲橫屏的解決方法
- 【Cocos2d-X(1.x 2.x) 】iOS6與iphone5適相關設置隨筆(解決第三方類庫無法通過armv7s編譯的方法、添加Default-568h@2x.png)