今天的內容是類,方法的定義與實現
一.類的定義
#import <Cocoa/Cocoa.h> // 1
@interfaceStudent : NSObject // 2
{
int age ;
NSString *name ; // 3
}
@property(nonatomic , retain) NSString *name ; // 4
@property(nonatomic , retain) int age ;
-( id )initName : (NSString *) aName andAge : (int) aAge ; //5
-( id )inttName : (NSString *) aName ; // 6
-(void)sayHello ;
@end // 1
注釋:
#import 告訴前置處理器,將標頭檔的內容包含到本檔案中. OC 中的import 能保證標頭檔只會被包含一次 .
@interface關鍵字:聲明一個Student類。@end 結束聲明.
冒號:表示繼承 後面跟的是父類.
NSObject是大多數對象都會用到的記憶體管理,和初始化架構,以及反射和類型操作. 相 當於Object。
NS是NextSTEP縮寫,表示這個函數來自Cocoa工具包。
聲明全域變數 , 與C中一樣。
property關鍵字:設定成員變數的屬性(有讀/寫,賦值assign,retain,copy ,以及對多線程的支援nonatomic)。
聲明一個方法,格式是 –(傳回值) 方法關鍵字1 : (參數類型)參數名 方法關鍵字2 : (參數類型)參數名 …… (在讀方法的時候就可以先找方法關鍵字來確定參數)。
- 減號是執行個體方法, + 是類方法
二.類的實現
#import “Student/Student.m”
#synthesizename ; //1
#synthesizeage ;
@implementationStudent // 2
-(id)initName : (NSString *) aName andAge : (int) aAge // 實現方法
{
if (self =[super init]) // 3
{
self.name = aName ;
self.age = aAge ;
}
return self ;
}
-( id )initName : (NSString *) aName // 4
{
self = [self initName : aName andAge : 0];
return self ;
}
-(void)sayHello
{
NSLog (”%@”,Hello World) ; // 5
}
@end
注釋:
#synthesize關鍵字: 根據@property設定,自動產生成員變數相應的存取方法,從而可以使用點操作符來方便的存取該成員變數 。
@implementation 關鍵字,表明類的實現 @end 結束
self 關鍵字 :類似於java中的this,是隱藏參數,指向當前調用方法的類。
super 關鍵字 :調用父類的方法。
self = [superinit] 這裡不是判斷self與[superinit]是否相等,而是判斷是否可以成功初始化。[super init]:父類初始化成功的話,通過=給self,這樣self成為一個非Null 物件,整個來說即非false(非NO)。
3. 另一個初始化方法中調用已有的初始化方法 這種概念被稱為Designated Initializer.
4. NSLog是OC中的標準輸出, 附加輸出當時日期, 時間, 應用程式名稱 . 使用NSLog()輸出任意對象的值時,都會使用%@格式說明。在使用這個說明符時,對象通過一個名為description的方法提供自己的NSLog()格式。
%i BOOL值.
三.對象的產生與方法的調用
#import<Foundation/Foundation.h>
#import “Student/Student.h”
int main( int argc , const char * argv[] ) // 1
{
NSAutoreleasePool *pool =[[NSAutoreleasePool alloc] init ] ; // 2
Student *s1 =[[Student alloc] initName :@” zhangsan ”
andAge : 15] ; // 3
[s1 sayHello] ; // 4
[s1 realease]
[pool drain] //
return 0 ;
}
注釋:
int argc , const char * argv[] : argv[0] 接受程式名,以後的參數命令列跟的是使用者輸入參數, argc則是紀錄了使用者在命令列輸入了幾個參數
建立一個自動釋放池 pool
建立一個對象 格式 類名 *對象名= [[類 alloc] init初始化資料] ;
alloc是個函數,作用是返回一個指向n個連續字元儲存單元的指標,alloc函數的調用者可以利用該指標儲存字元序列,在這裡是建立一個記憶體空間給對象,並將全部資料初始化為0。
init 是函數,作用是負責為類中的成員變數賦值。和一般方法沒有區別,只是在開頭加上了init。
4. 方法調用 格式 [對象名 方法名] 類似於 對象名.方法名;
PS :
BOOL : 布爾類型,1或者YES為真, 0 或者NO 為假。
@” ” 表示將@後的字串當成一個NSString 對象。
id 這是ObjC新加的一個資料類型,它是一般的物件類型,能夠儲存任何類型的方法。