一、類
聲明類的語法:
@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;
}