码迷,mamicode.com
首页 > 其他好文 > 详细

OC中的类

时间:2015-03-08 14:24:09      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:object-c   移动开发   

OC是一门面向对象的语言,其中自然少不了类。对应C++中的声明和定义,OC的类也分为interface和implementation,并分别以指令

@interface
...
@end

@implementation
...
@end

表述。一般我们会把interface部分放置在.h文件中,而实现部分,则放置在.m文件中。


下面是类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类的实现文件

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;
}

2、在OC中,一般的,我们所有的类都继承自NSObjec类,它实现了一些基本的方法,如alloc。





OC中的类

标签:object-c   移动开发   

原文地址:http://blog.csdn.net/u013378438/article/details/44131255

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!