[英]Organize #import Statements for Objective-C/XCode
在Objective-C中进行了几个月的编码后,我完全理解何时需要#import
,import语句如何级联(ripple?),以及何时使用转发类。 我不知道如何聚合导入以将它们置于<>
而不是引号中(尽管这可能仅适用于框架)...
问题是我弄得一团糟。 我来自Java(以及苛刻的IDE),所以我只是添加我认为合适的导入。 有时我会将它们添加到界面中,但由于这通常不是必需的,我只是将它们添加到有问题的.m
的顶部。
今天我开始思考:必须有一些关于如何组织这些东西的经验法则。 事实上,由于Objective-C是一个C超集,所以一切都有经验法则,但我不知道它们。 我该如何组织进口? 尤其:
.m
? .h
? .h
文件只是为了导入它们(即,只有导入的头文件)? 如果是这样,任何有关组织的提示? 这只是我想弄清楚的一般概念。
<....>
语法确实只适用于框架。 这并不意味着您不应该创建一个框架来包含应用程序的核心逻辑。 如果你这样做,这通常很有用:
a)需要为想要调用应用程序逻辑方面的可加载bundle提供支持(bundle链接到框架,应用程序也是如此)b)编写共享相同核心逻辑的多个应用程序
你的问题有点主观,你会得到两种方式争论的开发者,但我遵循的惯例是:
.h
文件中导入类定义, 除非你是它的子类 。 对.h
所有内容使用forward @class
指令。 .m
。 一般来说, .h
不需要访问其ivars,方法参数或返回值的类定义。 它只需要知道它们是类,这是@class
允许你做的。 它确实需要访问您正在进行子类化的任何类的定义,添加类别或(显然)实现协议。
忘记<...>
是否适用于框架或什么。 <...>
检查系统标题搜索路径,而"..."
除了检查当前目录。 但要记住的一件事是,在Apple平台上, <CoreFoo/CoreFoo.h>
声明的处理方式略有不同,但仅与苹果框架有关: CoreFoo.framework/Headers/CoreFoo.h
与CoreFoo/CoreFoo.h
匹配CoreFoo/CoreFoo.h
当导入在<>
而不是引号内时,所有这些意味着您要从框架中导入内容。 事实上,在执行此操作时,导入通常是样式
#import <Foundation/Foundation.h>
在斜杠之前的第一个Foundation
是所讨论的框架的名称,第二个基础是该框架中的头文件。 那个头文件就是这样的
#import <Foundation/NSObjCRuntime.h>
#import <Foundation/NSArray.h>
#import <Foundation/NSAutoreleasePool.h>
...
#import <Foundation/NSURLHandle.h>
包括该框架中的每个文件。 您也可以这样做,对于需要多次导入的组件来说并不是一个坏主意(尽管在这种情况下,您可能需要一个单独的公共接口)
对于其他的东西,遵循经验法则,你希望东西尽可能少地知道,你只想把导入放在头文件中,如果有必要的话(比如ivar或超类),但实际上它是一个问题味道。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.