#import(include)和:(inherit)在功能上有什么区别

时间:2014-03-26 11:57:17

标签: objective-c

我似乎不明白 #import (然后声明指向该类的指针)与继承之间的区别,因为我可以引用到那个超级类或包含的类..

并且,除了这个主题之外,由于松耦合原因,查看不能知道关于视图控制器。这是否意味着该视图不应该 #include 任何控制器并引用该控制器?

我想我错过了一些让我在这里感到困惑的基本概念。 提前谢谢你的帮助。

4 个答案:

答案 0 :(得分:1)

问题的快速回答是inheritance:)是一种通用的面向对象编程原则,包含(#import)提供了编译时使用的所有符号的声明,这是特定的C语言编程语言。

在Objective-C中,没有像Java那样的全局符号空间。每个文件必须包含所使用的每个符号的定义。

这是通过使用头文件并将接口与实现分开来完成的。

Objective-C编译器只构建.m文件,从不构建.h文件。 #import语句在构建时将.h文件的内容复制到.m文件中。

MyFoo.h

@interface MyFoo : NSObject
@end

MyBar.h

#import "MyFoo.h"

@interface MyBar : MyFoo
@end

MyBar.m

#import "MyBar.h"

@implementation MyBar
@end

在编译时只编译MyBar.m。对于编译器,#import将其源转储到MyBar.m。

编译器如何看MyBar.m

@interface MyFoo : NSObject
@end

@interface MyBar : MyFoo
@end

@implementation MyBar
@end

正如您所看到的,编译器关注MyBar的实现,并使用接口作为为所有声明的符号提供上下文的方法。

答案 1 :(得分:0)

  

导入头文件只是引用其他文件中编写的代码。

虽然继承非常不同且非常强大的面向对象编程概念。为了更好地理解这一点,请阅读this

答案 2 :(得分:0)

简短回答: -

这两者之间没有区别,唯一的是#import是在Objective-c中使用的修改样式。但#include是导入该类的旧C风格。

答案 3 :(得分:0)

或许以不同的方式解释这将有助于您理解..

基本上,#import实际上做的并不多,只是在你的.m文件中放了一个标题。

继承是完全不同的东西,这是当一个对象接受另一个对象的属性和函数时,并为它添加一些额外的功能。例如,老鹰会从一个物体,鸟类继承,因为老鹰是一只鸟,但鹰类不仅仅定义了一只鸟,还有尖锐的爪子等。

现在为了能够继承,你必须#import基类型的标题,例如在你的老鹰类中,你需要#import "bird.h"才能继承从它,否则老鹰班不会知道鸟是什么。

执行继承的代码是

//Eagle.h

#import "Bird.h"

@interface Eagle : Bird
//insert properties and functions here that would make an eagle an eagle and not just a bird
@end

希望有助于解释差异