Answers:
我怀疑是因为有模块,从而消除了对的需要#import <Cocoa/Cocoa.h>
。
至于将代码放在前缀标头中的位置,没有代码应放在前缀标头中。将导入文件放入需要它们的文件中。将定义放入自己的文件中。放置宏...无处。除非没有其他方法(例如,当需要时__FILE__
),否则停止编写宏。如果确实需要宏,请将其放在标头中并包含它。
对于庞大的事物,整个系统中几乎所有事物(例如Foundation.h
)都需要使用前缀标头。如果您拥有庞大而无处不在的东西,则应该重新考虑您的体系结构。前缀标头使代码难以重用,并且如果列出的任何文件可以更改,都会引起细微的构建问题。避免使用它们,直到出现严重的构建时间问题为止,您可以证明前缀前缀显着改善了构建时间。
在这种情况下,您可以创建一个并将其传递给clang,但这是一个好主意,这种情况很少见。
编辑:对于您在所有视图控制器中使用的HUD的特定问题,是的,您应该绝对将其导入到实际使用它的每个视图控制器中。这使依赖关系变得清晰。当您在新项目中重新使用视图控制器时(如果很好地构建控制器,这很常见),您将立即知道它的需求。这对于类别尤其重要,如果类别是隐式的,这会使代码很难重用。
没有PCH文件可以消除列表依赖性。您仍然应该像Xcode模板一样导入UIKit.h
或Foundation.h
根据需要导入。PCH的原因是在处理真正庞大的标头时(如在UIKit中),可以缩短构建时间。
TWAPIManager.m
例如,当您尝试将其复制到另一个项目时,会得到TWALog()
未定义的错误,并且没有提示在哪里找到它的提示。我在试图共享代码的几个大型项目中遇到了这个问题。创建TWAPILog.h
和导入它可以用很小的开发成本解决这个问题。
无需怀疑是否正确,您可以手动添加PCH文件:
将新的PCH文件添加到项目中:新建文件>其他> PCH文件。
在Target的Build Settings选项中,将Prefix Header的值设置为您的PCH文件名,并以项目名称作为前缀(即,对于名为的项目TestProject
和名为的PCH文件MyPrefixHeaderFile
,将其值添加TestProject/MyPrefixHeaderFile.pch
到plist)。
提示:您可以使用$(SRCROOT)
或之类的方法$(PROJECT_DIR)
来获取将其放置.pch
在项目中的路径。
在“目标”的“ 构建设置”选项中,将“ 预编译前缀头”的值设置为YES
。
您需要创建自己的PCH文件
添加New file -> Other-> PCH file
然后将此PCH文件的路径添加到您的构建中 setting->prefix header->path
($(SRCROOT)/filename.pch)
$(PRODUCT_DIR)/$(PRODUCT_NAME)/PrefixHeader.pch
如果您决定手动添加.pch文件,并且希望像xCode 6之前一样使用Objective-C,则还必须在.pch文件中导入UIKit和Foundation框架。否则,您将必须在每个头文件中手动导入这些框架。您可以在测试所用语言时始终添加以下代码:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif