【发布时间】:2014-08-01 06:11:53
【问题描述】:
为什么ProjectName-Prefix.pch 没有在Xcode 6 中自动创建?
是否不再需要预编译头文件?
我应该在哪里写之前ProjectName-Prefix.pch中的代码?
【问题讨论】:
为什么ProjectName-Prefix.pch 没有在Xcode 6 中自动创建?
是否不再需要预编译头文件?
我应该在哪里写之前ProjectName-Prefix.pch中的代码?
【问题讨论】:
要添加新的 PCH 文件,请按照以下步骤操作:
(1) 添加新文件 - 选择 iOS - 其他和 PCH 文件
(2) 将此 PCH 文件的路径添加到您的项目 - BuildSetting - Apple LLVM 6.0 Language
添加设置前缀标题路径 YourApplicationName(root-path)/filename.pch
【讨论】:
您需要创建自己的 PCH 文件
添加New file -> Other-> PCH file
然后将此PCH文件的路径添加到您的构建setting->prefix header->path
($(SRCROOT)/filename.pch)
【讨论】:
$(PRODUCT_DIR)/$(PRODUCT_NAME)/PrefixHeader.pch
我给你看一张照片!
添加新文件
转到 项目/构建设置/APPl LLVM 6.0-语言
【讨论】:
使用:
$(PROJECT_DIR)/项目名称/PrefixHeader.pch
【讨论】:
不问是否正确,您可以手动添加PCH文件:
将新的 PCH 文件添加到项目中:新建文件 > 其他 > PCH 文件.
在 Target 的 Build Settings 选项中,将 Prefix Header 的值设置为您的 PCH 文件名,以项目名称作为前缀(即,对于名为 TestProject 的项目和名为MyPrefixHeaderFile 的PCH 文件,将值TestProject/MyPrefixHeaderFile.pch 添加到plist)。
提示:您可以使用 $(SRCROOT) 或 $(PROJECT_DIR) 之类的东西来找到您在项目中放置 .pch 的路径。
在 Target 的 Build Settings 选项中,将 Precompile Prefix Header 的值设置为 YES。
【讨论】:
如果您决定手动添加 .pch 文件,并且想要像 xCode 6 之前一样使用 Objective-C,您还必须在 .pch 文件中导入 UIKit 和 Foundation 框架。否则,您将不得不在每个头文件中手动导入这些框架。您可以在测试所用语言时添加以下代码:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
【讨论】:
添加 .pch 文件-
1) 将新的 .pch 文件添加到您的项目中->新建文件->其他->PCH 文件
2) 转到您项目的构建设置。
3) 搜索“前缀标题”。你可以在 Apple LLVM 下找到它。
4) 将此粘贴到字段$(SRCROOT)/yourPrefixHeaderFileName.pch
5) 清理并构建项目。 就是这样!!!
【讨论】:
我怀疑是因为模块,它消除了对 #import <Cocoa/Cocoa.h> 的需要。
至于将代码放在前缀标头中的位置,没有代码应该放在前缀标头中。将您的导入文件放入需要它们的文件中。将您的定义放入他们自己的文件中。把你的宏......无处。停止编写宏,除非没有其他方法(例如当您需要 __FILE__ 时)。如果您确实需要宏,请将它们放在标题中并包含它。
对于庞大且几乎被整个系统中的所有东西使用的东西(如Foundation.h),前缀标头是必需的。如果你有如此庞大而无处不在的东西,你应该重新考虑你的架构。前缀标头使代码重用变得困难,并且如果列出的任何文件都可以更改,则会引入细微的构建问题。避免使用它们,直到您遇到严重的构建时间问题,您可以证明使用前缀标头可以显着改善。
在这种情况下,您可以创建一个并将其传递给 clang,但它是一个好主意的情况非常罕见。
编辑:对于您在所有视图控制器中使用的 HUD 的具体问题,是的,您绝对应该将其导入到实际使用它的每个视图控制器中。这使得依赖关系清晰。当您在一个新项目中重用您的视图控制器时(如果您构建好控制器,这很常见),您将立即知道它需要什么。这对于类别来说尤其很重要,如果它们是隐式的,这会使代码很难重用。
PCH 文件不是用来摆脱列表依赖的。您仍应根据需要导入 UIKit.h 或 Foundation.h,就像 Xcode 模板所做的那样。 PCH 的原因是在处理非常大的标头时(例如在 UIKit 中)缩短构建时间。
【讨论】:
TWAPIManager.m 复制到另一个项目时,您将收到TWALog() 未定义的错误,并且没有提示在哪里可以找到它。我在几个试图共享代码的大型项目中遇到了这个问题。创建 TWAPILog.h 并导入它以微不足道的开发成本解决了这个问题。