我似乎不明白 #import (然后声明指向该类的指针)与继承之间的区别,因为我可以引用到那个超级类或包含的类..
并且,除了这个主题之外,由于松耦合原因,查看不能知道关于视图控制器。这是否意味着该视图不应该 #include 任何控制器并引用该控制器?
我想我错过了一些让我在这里感到困惑的基本概念。 提前谢谢你的帮助。
答案 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
希望有助于解释差异