天天看点

Objective-C文件组织介绍(附代码)接口与实现头文件import语句就像#include,本质是进行了剪切和粘贴的操作,将Foot.h和Hand.h的文件内容粘贴到Person中。文件之间的依赖关系

接口与实现

Objective-C类的代码分为两部分,一部分是接口,用来展示类的构造:

#import <Foundation/Foundation.h>
#import "Hand.h"
#import "Foot.h"
@interface Person : NSObject
{

    NSString *name;
    NSString *sex;
    NSString *age;
    Hand *hands[];
    Foot *foots[];

}
-(void)setName:(NSString*) name;
-(void)setSex:(NSString*) sex;
-(void)setAge:(NSString*) age;
-(void)print;
-(void)desc;
@end
           

这部分代码一般放在头文件中,一般以.h结尾。

另一部分是实现:

@implementation Person
-(void)setName:(NSString*) n{
    name = n;
}
-(void)setSex:(NSString*) s{
    sex = s;
}
-(void)setAge:(NSString*) a{
    age = a;
}
-(void)print{
    NSLog(@"name:%@,sex:%@,age:%@",name,sex,age);
}
-(id)init{
   ……
    return self;
}
-(void)desc{
    ……
}
@end
           

所有的实现都放在与类同名但以.m为后缀的文件中。

如果使用.mm做文件的扩展名,就可以使用c++和Objective-C混合编程了。

头文件

导入头文件有两种方式,一种是使用引号,一种是使用尖括号。尖括号用于导入系统头文件,引号导入本地头文件。

import语句就像#include,本质是进行了剪切和粘贴的操作,将Foot.h和Hand.h的文件内容粘贴到Person中。

文件之间的依赖关系

在上述代码中Person依赖于Foot和Hand,一般Foot和Hand其中一个产生任何变化,Person都会重新进行编译。

Objective-C提供了一种方法,减少这种重新编译的负面影响。就是使用@class关键字。

这个关键字是用来告诉编译器,这是一个类,所以我只会通过指针来引用它。

#import <Foundation/Foundation.h>
@class Hand;
@class Foot;
@interface Person : NSObject
{

    NSString *name;
    NSString *sex;
    NSString *age;
    Hand *hands[];
    Foot *foots[];

}
-(void)setName:(NSString*) name;
-(void)setSex:(NSString*) sex;
-(void)setAge:(NSString*) age;
-(void)print;
-(void)desc;
@end
           

@class对于循环引用也很有好处,例如A依赖B,B也依赖A,这时如果使用import就会报错,但是使用@class就不会。

对于非指针引用的其他类就不能使用@class。例如我们建立一个Student类,继承Person类,这时在Student中就必须#import Person.h。

对比代码效果更好一些,我将代码放在了github上:

https://github.com/mymdeep/OC_foundation

更多的开发知识,可以关注我的公众号:

Objective-C文件组织介绍(附代码)接口与实现头文件import语句就像#include,本质是进行了剪切和粘贴的操作,将Foot.h和Hand.h的文件内容粘贴到Person中。文件之间的依赖关系

继续阅读