zoukankan      html  css  js  c++  java
  • Prefix.pch文件的用法

    我们知道,每新建立一个工程,比如说HelloWord,在分类SupportingFiles里都会有一个以工程名开头-Prefix.pch结尾的文件,如HelloWord-Prefix.pch。对于这个文件,很长一段时间里笔者都没觉得它碍事。直到有一天笔者学习NSLog看网上的教程,大家是怎样在最终提交应用的时候,一次性将NSLog语句移除。
    网上大多转来转去的方法,都是说把如下的语句

    #ifdef DEBUG
    #    define DLog(...) NSLog(__VA_ARGS__)
    #else
    #    define DLog(...) /* */
    #endif
    #define ALog(...) NSLog(__VA_ARGS__)


    加到 <AppName>-Prefix.pch的文件中。虽然对于这种作法,笔者最终由于,不想在调试一个东西而出现一堆东西,最终没有使用这种方法。但是 <AppName>-Prefix.pch这个文件,最终引起了作者的注意。
    网上查了一下有解释说.pch是“precompiled header”的意思,那么字面意思理解就是预编译文件头喽。据说在程序编译前都优先编译好这里指定的文件,这样可以加快编译速度。好吧,我们来看看默认这个文件里包含什么:

    //
    // Prefix header for all source files of the 'HelloWorld' target in the 'HelloWorld' project
    //

    #import <Availability.h>

    #ifndef __IPHONE_4_0
    #warning "This project uses features only available in iOS SDK 4.0 and later."
    #endif

    #ifdef __OBJC__
      #import <UIKit/UIKit.h>
      #import <Foundation/Foundation.h>
    #endif

    按着Command键,再点开UIKit/UIKit.h,你发现了什么?你发现了什么?

    //
    //  UIKit.h
    //  UIKit
    //
    //  Copyright (c) 2005-2011, Apple Inc. All rights reserved.
    //

    #import <UIKit/UIKitDefines.h>
    #import <UIKit/UIAccelerometer.h>
    #import <UIKit/UIAccessibility.h> 
    #import <UIKit/UIActivityIndicatorView.h>
    #import <UIKit/UIAlert.h>
    #import <UIKit/UIApplication.h>
    #import <UIKit/UIBarButtonItem.h>
    #import <UIKit/UIBarItem.h>
    #import <UIKit/UIBezierPath.h>
    #import <UIKit/UIButton.h>
    #import <UIKit/UIColor.h>
    #import <UIKit/UIControl.h>
    #import <UIKit/UIDataDetectors.h>
    #import <UIKit/UIDatePicker.h>
    #import <UIKit/UIDevice.h>
    #import <UIKit/UIDocument.h>
    #import <UIKit/UIDocumentInteractionController.h>
    #import <UIKit/UIEvent.h>
    #import <UIKit/UIFont.h>
    #import <UIKit/UIGeometry.h>
    #import <UIKit/UIGestureRecognizer.h>
    #import <UIKit/UIGraphics.h>
    #import <UIKit/UIImage.h>
    #import <UIKit/UIImagePickerController.h>
    #import <UIKit/UIImageView.h>
    #import <UIKit/UIInterface.h>
    #import <UIKit/UILabel.h>
    #import <UIKit/UILocalNotification.h>
    #import <UIKit/UILocalizedIndexedCollation.h>
    #import <UIKit/UILongPressGestureRecognizer.h>
    #import <UIKit/UIManagedDocument.h>
    #import <UIKit/UIMenuController.h>
    #import <UIKit/UINavigationBar.h>
    #import <UIKit/UINavigationController.h>
    #import <UIKit/UINib.h>
    #import <UIKit/UINibDeclarations.h>
    #import <UIKit/UINibLoading.h>
    #import <UIKit/UIPageControl.h>
    #import <UIKit/UIPageViewController.h>
    #import <UIKit/UIPanGestureRecognizer.h>
    #import <UIKit/UIPasteboard.h>
    #import <UIKit/UIPickerView.h>
    #import <UIKit/UIPinchGestureRecognizer.h>
    #import <UIKit/UIPopoverController.h>
    #import <UIKit/UIPopoverBackgroundView.h>
    #import <UIKit/UIPrintError.h>
    #import <UIKit/UIPrintFormatter.h>
    #import <UIKit/UIPrintInfo.h>
    #import <UIKit/UIPrintInteractionController.h>
    #import <UIKit/UIPrintPageRenderer.h>
    #import <UIKit/UIPrintPaper.h>
    #import <UIKit/UIProgressView.h>
    #import <UIKit/UIReferenceLibraryViewController.h>
    #import <UIKit/UIResponder.h>
    #import <UIKit/UIRotationGestureRecognizer.h>
    #import <UIKit/UIScreen.h>
    #import <UIKit/UIScreenMode.h>
    #import <UIKit/UIScrollView.h>
    #import <UIKit/UISearchBar.h>
    #import <UIKit/UISearchDisplayController.h>
    #import <UIKit/UISegmentedControl.h>
    #import <UIKit/UISlider.h>
    #import <UIKit/UISplitViewController.h>
    #import <UIKit/UIStepper.h>
    #import <UIKit/UIStoryboard.h>
    #import <UIKit/UIStoryboardPopoverSegue.h>
    #import <UIKit/UIStoryboardSegue.h>
    #import <UIKit/UIStringDrawing.h>
    #import <UIKit/UISwipeGestureRecognizer.h>
    #import <UIKit/UISwitch.h>
    #import <UIKit/UITabBar.h>
    #import <UIKit/UITabBarController.h>
    #import <UIKit/UITabBarItem.h>
    #import <UIKit/UITableView.h>
    #import <UIKit/UITableViewCell.h>
    #import <UIKit/UITableViewController.h>
    #import <UIKit/UITapGestureRecognizer.h>
    #import <UIKit/UITextField.h>
    #import <UIKit/UITextInput.h>
    #import <UIKit/UITextInputTraits.h>
    #import <UIKit/UITextView.h>
    #import <UIKit/UIToolbar.h>
    #import <UIKit/UITouch.h>
    #import <UIKit/UIVideoEditorController.h>
    #import <UIKit/UIView.h>
    #import <UIKit/UIViewController.h>
    #import <UIKit/UIWebView.h>
    #import <UIKit/UIWindow.h>

    举个例子,有没有注意到#import <UIKit/UILabel.h>?笔者在使用如下语句的时候:

    UILabel *_testLabel = [UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 15)];

    曾经不止一次的怀疑,这个UILabel是哪来的,为嘛可以直接用。这个文件就说明了一切!
    对此你有什么想法?我的想法就是:如果我每个View几乎都要用到ASIHTTPRequest的话,那么我只在这里引用一次ASIHTTPRequest.h就够了!
    这样我就可以在需要使用的ASIHTTPRequest的时候直接用了!

    注意点:

    1. 一般pch里只放不常变化和修改的东西,如果一股脑儿把乱七八糟的东西都往里面加,其中include的.h里面有发生变化,会导致整个工程重新编译,在大工程(编译几十分钟那种)是比较致命的.

    2. 如果只是需要一个全局的头文件来定义一些宏等等,随便选择一个文件名就好了。还有,将每个类用到的头文件放到一个pch里面,这是非常错误的做法,应当在每个类单元引用头文件。

    因为pch文件是可以不存在的!

    参考资料: http://blog.cnrainbird.com/index.php/2012/03/21/guan_yu_lt_appname_gt_-prefix_pch_wen_jian_de_ke_huan_yong_fa/

  • 相关阅读:
    .NetCore~框架版本号不同引起dotnet不能run它
    Linux~centos上安装.netcore,HelloWorld归来!
    Lind.DDD.Utils.HttpHelper里静态对象引出的Http超时问题
    [置顶] C++ Pirate: Lambda vs Bind
    如何成为CSDN博客专家
    MFC下的日历表
    世界上最便宜的10张防癌处方
    android权限大全
    应用程序管理集
    谢希仁《计算机网络》第五版---第四章
  • 原文地址:https://www.cnblogs.com/Cheetah-yang/p/4838627.html
Copyright © 2011-2022 走看看