【Xcode小技巧】Xcode6 prefix header

在Xcode6之前,新建一个工程的时候,系统会自带一个pch (precompile header)文件。在开发过程中,可以把那些在整个工程中,都广泛使用的头文件,包含在该文件下。编译器会自动将pch文件中的头文件,添加到所有的源文件中去。这样在需要使用相关类的时候不需要使用import就可以直接使用头文件中的内容,很大程度上带来了编程的便利性。但潜在的也带来了一些问题,这可能是Xcode6中默认不再创建pch的原因吧。(此观点摘自)

Xcode6之后,刚才说的那些美好都没有了~原因是什么呢?
我根据stackoverflow的一个观点,总结如下:

  • 因为module,我们没有了#import 的需求
  • 你在prefix header中写的代码是没有必要的。哪儿需要import,你就在那儿写。把你的定义写到他们所属的文件中去。把你的宏,哎,除非没有别的路,还是停止写宏吧。如果,哥们儿,你实在要写宏,那你就把它们放在一个头文件中引入。
  • 只有当一个文件又大,而且几乎整个程序都要用(就像Foundation.h),我们才有必要用prefix header。但是矛盾来了,如果你有这么个文件,它又大又无处不在,你是不是该想想,你这是啥架构啊。
  • 最重要的原因,prefix header导致代码很难重用,而且会导致一些莫名其妙的编译问题。

但是,在一些情形,如维护代码,或者利用以前的一些代码的时候,我们可能会用到prefix header,有没有解决方法呢?必须有啊!

只需两步!

  • 1、在工程中新建一个.pch文件。


    【Xcode小技巧】Xcode6 prefix header_第1张图片
    pch
  • 2、将它与编译设置关联。我对Clang不了解,但是在path中写的$(SRCROOT)/BlockAndDelegatePassValueDemo/PrefixHeader.pch,还是很好理解的。$(SRCROOT)代表了工程的相对路径,你写完path,敲一下回车,path里就是绝对路径了
    ,然后紧跟后面的/BlockAndDelegatePassValueDemo是相对工程名,最后是/PrefixHeader.pch.pch的名。

最近又学习到一种更好的方式$(SRCROOT)/$(PROJECT_NAME)/PrefixHeader.pch,其中$(PROJECT_NAME)是相对工程名,比上面的方法更便捷.

【Xcode小技巧】Xcode6 prefix header_第2张图片
connect1

【Xcode小技巧】Xcode6 prefix header_第3张图片
connect2

编译一下,你就会发现,你所希望的美好又回来了!

你可能感兴趣的:(【Xcode小技巧】Xcode6 prefix header)