OC是一门面向对象的语言,其中自然少不了类。对应C++中的声明和定义,OC的类也分为interface和implementation,并分别以指令
@interface ... @end @implementation ... @end
下面是类Fraction的实例,
Fraction.h头文件:
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
{
int x;
}
// 成员变量
// 省略
//类方法
+(Fraction*) allocF;
+(void) FractionPrint;
//实例方法
-(void) Print;
-(void) setTo:(int) n over:(int) m;
-(double) convertToNum;
-(void) add:(Fraction*) f;
@end
Fraction.m
#import "Fraction.h"
@implementation Fraction
+(Fraction*) allocF
{
return [Fraction alloc];
}+(void)FractionPrint
{ NSLog(@"This is class function FractionPrint");}
-(void)Print
{
NSLog(@"%i", x);
}
-(void) setTo:(int) n over:(int)m
{
NSLog(@"call setTo");
}
-(double) convertToNum
{
NSLog(@"call convertToNum");
return 1;
}
-(void) add:(Fraction*) f
{
NSLog(@"call add");
}
//存取方法
//暂时省略
@end
上面是OC类的一个实例,对比C++类,有这么几点要注意:
1、OC用函数名称前的+、-号分别表示 类方法 与 实例方法。我们可以简单的对应为C++中的类静态方法与普通成员函数。
同时,对于类方法,对比C++静态函数,OC也有 类似的地方。
(1)OC的类方法只能够访问静态变量或全局变量,而不能够访问类的实例变量。(其原因应该和C++一样,静态方法可以通过类名直接访问,这时候它能访问的仅有静态与全局变量(成员变量要依靠类对象内存空间,所以通过类名直接访问时,成员变量是不存在的)
(2)OC的类方法仅能够通过类名称来调用,而不像C++中静态方法也可以由类对象来调用。
例如对于Fraction类的类方法来说,调用类方法
FractionPrint
#import <Foundation/Foundation.h>
#import "ClassTest.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Fraction* f = [[Fraction allocF] init];
[Fraction FractionPrint]; // 若使用[f FractionPrint]则提示接口没有该方法<span style="font-family: Arial, Helvetica, sans-serif;"> </span> }
return 0;
}
原文地址:http://blog.csdn.net/u013378438/article/details/44131255