Object-c類

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後,會自動生成存取方法:setNumnum;

@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

發佈了37 篇原創文章 · 獲贊 6 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章