類、對象、方法、super、self、init方法


一、類

聲明類的語法:

      @interface 類名 : 被繼承類<協議,...>

      [{實例變量;}]

      [實例方法聲明]

      @end

實現類的語法:

      @implementation 類名

      [實例方法實現]

      @end

例子:

Car.h

#import <Foundation/Foundation.h>

@interface Car : NSObject{

   NSString *name;

   int number;

 }

 -(NSString*) name;

 -(void) setnumber:(int) number;

@end/*Car*/

Car.m

#import "Car.h"

@implementation Car

  -(NSString*) name{

      return  @"BWM";

   }

  -(void)setnumber:(int) num{

      number = num;

      return  number;

   }

@end


說明:

1、允許有空類和空實現。


二、對象(instance)

創建對象兩種語法:

1、類名 *對象指針名 = [[類名 alloc] init];

2、類名 *對象指針名 = [類名 new];(Objective-C 2.0以後支持)

說明:

1、兩種寫法在功能上完全相同。


三、方法(methods)

實例方法聲明語法:

-(返回類型) 方法名[:(參數類型) 參數名 方法名:(參數類型) 參數名...]

類方法聲明語法:

+(返回類型) 方法名[:(參數類型) 參數名 方法名:(參數類型)  參數名...]

說明:

1、類方法不能訪問實例變量,但可以訪問靜態變量。

2、實例方法中獲取實例變量值getter不加get,並且與實例變量同名。

3、實例方法中設置實例變量值setter可以加set,例如setnumber。

4、開頭的負號(-)通知Object-C編譯器,該方法是一個實例方法。

5、類方法不需要實體就可以調用。

6、實例方法總是可以直接訪問實例變量。

例子:

/**

 * total.h

 * 本程序目的:統計創建了多少實例對象

 **/

 #import <Foundation/Foundation.h>

 static int count;

 @interface Total : NSObject

 +(int) initCount;

 +(void) initialize;

 @end/*Tatal*/


/**

 * total.m

 **/

#import "total.h"

@implementation Total

-(id) init{

self = [super init];

count++;

return self;

}


+(int) initCount{

return count;

}


+(void) initialize{

count = 0;

}

@end


/**

 * main.m

 */

#import "total.h"

int main(int argc,const char** argv){

Total *total1 = [[Total alloc] init];

Total *total2 = [[Total alloc] init];

NSLog(@"there are %i instances.",[Total initCount]);

[total1 release];

[total2 release];

return (0);

}


四、super


五、self 

self相當於C++中的this指針,它也是用於指向當前對象的一個指針。值得注意的是,每次向方法傳遞消息的同時,self也會跟隨作爲參數傳過去。Objective-C內部對方法接收了這個隱藏參數,所以在方法中可以使用self。例如:

-(int) number{

return number;

}

-(void)  printCarNumber{

   NSLog(@"The car's number is %i",[self number]);

}


六、init方法

init方法是創建對象時必須調用的一個方法,相當於C++中的構造函數。我們可以根據自己的需要重寫這個方法。例如:

-(id) init{

self = [super init];//必須先call父類,實際上是先構造父類,因爲只有構造父類好後纔可能構造子類。這是Objective-C的標準寫法。

if(self){//如果構造失敗,返回nil,表示空對象

[self setLevel:0];

}

return self;

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章