1 類的聲明及定義
一個類包含兩部分:類的聲明(@interface)和類的定義(@implement)。
類的聲明爲class.h,而定義爲class.m,兩個文件的名字相同,後綴名不同。
使用時,只需要import “class.h”即可。
#import <Foundation/Foundation.h>
@interface Number: NSObject
-(void) print();
-(void) setNum:(int) n;
-(int) num;
@end
這裏是Number類的聲明,繼承自NSObject,有三個方法,print、setNum沒有返回值,num返回int型值。
類的定義:
#import "Nuumber.h"
@implement Nuumber{
int num;
}
-(void)print {
NSlog(@"%i",num);
}
-(void)setNum:(int) n {
num = n;
}
-(int)num{
return num;
}
@end
注意:導入時用雙引號,而不是<Foundation/Foundation.h>,雙引號適用於自己的文件,而<>適用於系統文件。
調用時只需要引入Number.h文件即可。
#improt "Nuumber.h"
int main(int argc, char *argv[]){
@autoreleasepool{
Nuumber *number = [[Nuumber alloc] init];
[number setNum:2];
NSLog(@"result:%i",[number num]);
}
}
2 生成存取方法
接口部分使用@property。使用後,實現部分就不需要再聲明屬性了,編譯器會自動檢查。
@interface Number : NSObject
@property num;
-(void) print();
-(void) setNum:(int) n;
-(int) num;
@end
實現部分使用@synthesize後,會自動生成存取方法:setNum和num;
@implement Nuumber
@synthesize num;
-(void)print {
NSlog(@"%i",num);
}
@end
@property ( copy, nonatomic ); copy屬性會在setter方法內生成屬性的副本,默認不會產生屬性的副本,只是賦值(assign)。
nonatomic屬性表示線程安全。
3 點運算符
訪問Number類中的num屬性可以使用 [number num];
也可以使用 number.num;
賦值使用 number.num = 1; 就等同於 [number setNum:1]
點運算符也可以用在自定義的方法上,如上有一個print方法,所以寫作 number.print。需要注意的是點運算符一般用在屬性上,用在方法代碼風格不夠清晰。
注意:使用@synthesize時,屬性名不要爲new alloc copy init。
4 多個參數
@interface DecimalNuumber : NSObject
@property integer , decimal;
-(void) setInteger:(int)a andDecimal:(int)b //-(void) setInteger:(int)a :(int)b;
@end
//調用
[number setInteger:1 andDecimal:2] //[number setInteger:1:2]
5 static關鍵字
在變量前加static關鍵字,爲靜態變量,可以讓變量多次保留方法多次調用的值。
static int count = 0;
靜態變量的初始化值爲0。只在程序第一次運行時初始化,多次調用時保留值。
6 self關鍵字
self關鍵字用來指明對象是當前方法的接受者。
@implement Nuumber
@synthesize num;
-(void)print {
[self print1]
}
-(void)print1 {
NSlog(@"%i",num);
}
-(void)setNum:(int) n {
num = n + self.num;
}
-(int)num{
return num;
}
@end