A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HiGodl 中级黑马   /  2015-9-24 16:55  /  704 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HiGodl 于 2015-9-24 17:02 编辑

在我们刚刚开始学习OC时,我们基本上就是把源代码全都放在main.m文件中了,然而这样做是不合理的,对于小程序来说还可以,但是项目太大的话这样做明显维护起来会很麻烦,所以我们就需要把源代码做一个拆分,为每一个类去创建一个.m文件以及.h文件,.h存放类的@interface部分,.m存放类的@implementation部分,然后在.m文件中引入类的头文件.h,下面我们来看一个例子:
Car类
Car.h
  1. @interface Car : NSObject{

  2. }
  3. -(void) print;
  4. @end
复制代码
Car.m
  1. #import "Car.h"
复制代码
main.m
  1. #import <Foundation/Foundation.h>
  2. @Car
  3. int main(int argc, const char * argv[]) {
  4. Car *c = [[Car alloc] init];
  5. [c print];
  6. return 0;
  7. }
复制代码
其中main.m文件中引入类有两种方式,一种是使用@class,一种是class.h,但是由于使用类名.h的话每次编译都会把所有相关的类都重新编译一遍,这样在编译时会花费很长时,由于依赖关系是传递的,头文件之间也可以互相依赖,所以重新编译问题会更严重。
然而使用@class 的方式就会避免这种问题出现,@class会告诉编译器,这个引入的是一个类,我会通过指针来引用该类

但是在继承中引用父类就不能用@class这种方式了,因为子类在编译时需要得到父类的的信息才能成功的编译@interface部分


1 个回复

倒序浏览
不知怎么回事。。代码补不全了Car.m
  1. @implementation
  2. -(void) print{
  3. NSLog(@"this is car");
  4. }

  5. @end
复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马