Question
Why isn't ProjectName-Prefix.pch
created automatically in Xcode 6
?
Is the precompile header no longer needed ?
Where should I write the code that was in ProjectName-Prefix.pch
before ?
Answer
I suspect because of modules, which remove the need for the #import <Cocoa/Cocoa.h>
.
As to where to put code that you would put in a prefix header, there is no
code you should put in a prefix header. Put your imports into the files that
need them. Put your definitions into their own files. Put your
macros...nowhere. Stop writing macros unless there is no other way (such as
when you need __FILE__
). If you do need macros, put them in a header and
include it.
The prefix header was necessary for things that are huge and used by nearly
everything in the whole system (like Foundation.h
). If you have something
that huge and ubiquitous, you should rethink your architecture. Prefix headers
make code reuse hard, and introduce subtle build problems if any of the files
listed can change. Avoid them until you have a serious build time problem that
you can demonstrate is dramatically improved with a prefix header.
In that case you can create one and pass it into clang, but it's incredibly rare that it's a good idea.
EDIT: To your specific question about a HUD you use in all your view controllers, yes, you should absolutely import it into every view controller that actually uses it. This makes the dependencies clear. When you reuse your view controller in a new project (which is common if you build your controllers well), you will immediately know what it requires. This is especially important for categories, which can make code very hard to reuse if they're implicit.
The PCH file isn't there to get rid of listing dependencies. You should still
import UIKit.h
or Foundation.h
as needed, as the Xcode templates do. The
reason for the PCH is to improve build times when dealing with really massive
headers (like in UIKit).