今天的內容是類,方法的定義與實現
一.類的定義
#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成爲一個非空對象,整個來說即非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新加的一個數據類型,它是一般的對象類型,能夠存儲任何類型的方法。