CocoaPods+PrefixHeader.pch+Const

Cocoapods意义体如今两个方面。第一,在引入第三方库时它能够自动为咱们完成各类各样的配置,包括配置编译阶段、链接器选项、甚至是ARC环境下的-fno-objc-arc配置等。第二,使用CocoaPods能够很方便地查找新的第三方库,这些类库是比较“标准的”,而不是网上随便找到的,这样可让咱们找到真正好用的类库。react

CocoaPods的核心组件ios

CocoaPods是用Ruby写的,并划分红了若干个Gem包。git

CocoaPods在解析执行过程当中最重要的几个包的路径分别是:CocoaPods/CocoaPods、 CocoaPods/Core和 CocoaPods/Xcodeproj。github

CocoaPods / CocoaPod:这是面向用户的组件,每当执行一个pod命令时,这个组件将被激活。它包括了全部实用CocoaPods的功能,而且还能调用其余gem包来执行任务。web

CocoaPods / Core:Core gem提供了与CocoaPods相关的文件(主要是podfile和podspecs)的处理。xcode

 

Podfile:该文件用于配置项目所须要的第三方库,它能够被高度定制。本文中咱们主要在这里作动做。ruby

Podspec:该文件描述了一个库将怎样被添加进工程中。.podspec文件能够标识该第三方库所须要的源码文件、依赖库、编译选项,以及其余第三方库须要的配置。测试

CocoaPods / Xcodeproj:这个包负责处理工程文件,它能建立以及修改.xcodeproj文件和.xcworkspace文件。它也能够做为一个独立的包使用,当你要编写修改项目文件的脚本时,能够考虑使用CocoaPods/Xcodeproj。优化

 

Cocoapods安装步骤网站

一、升级Ruby环境

终端输入:$gem update --system

此时会出现

ERROR: While executing gem ... (Gem::FilePermissionError)

You don‘t have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

zijingMacBook-Pro:~ shiyunlei$ sudo gem update —system

这个是由于你没有权限去更新Ruby

这个时候你能够在终端使用:$sudo gem update —system来进行升级

 

这个时候表示Ruby升级完成。

 

二、安装CocoaPods时咱们要访问cocoapods.org,该网站可能被咱们大天朝墙了,这样下载安装可能会是龟速,幸亏咱们能够用淘宝的Ruby镜像来访问该网站,方法以下:

一、gem sources --remove https://rubygems.org/

二、gem sources -a http://ruby.taobao.org/

可使用下面的命令(红色部分)查看是否更换镜像成功(以下图所示):
$ gem sources -l

 

三、安装Cocoapods,在终端输入命令

$sudo gem install cocoapods

这个时候会提示你输入密码,注:在终端输入密码不会有提示,光标也不会移动,必定要注意

开始安装,以下图:PS:这个过程可能花费时间比较长

 

安装成功以下:

 

四、使用search命令搜索类库名:

$pod search AFNetworking

若是CocoaPods支持,将会输出搜索到的全部类库版本和信息,以及在Podfile中配置的写法,终端返回信息以下:

-> AFNetworking (2.3.1)

A delightful iOS and OS X networking framework.

pod ‘AFNetworking‘, ‘~> 2.3.1’(这个语句是须要在编辑Podfile的时候输入的命令,便是如何安装下载相关类库的指令)

- Homepage: https://github.com/AFNetworking/AFNetworking

- Source: https://github.com/AFNetworking/AFNetworking.git

- Versions: 2.3.1, 2.3.0, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0,

2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1, 1.3.4, 1.3.3,

1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.1, 1.0, 1.0RC3, 1.0RC2, 1.0RC1,

0.10.1, 0.10.0, 0.9.2, 0.9.1, 0.9.0, 0.7.0, 0.5.1 [master repo]

- Sub specs: - AFNetworking/Serialization (2.3.1) -

AFNetworking/Security (2.3.1) - AFNetworking/Reachability (2.3.1) -

AFNetworking/NSURLConnection (2.3.1) - AFNetworking/NSURLSession (2.3.1)

- AFNetworking/UIKit (2.3.1)

-> AFNetworking+AutoRetry (0.0.5)

Auto Retries for AFNetworking requests

pod ‘AFNetworking+AutoRetry‘, ‘~> 0.0.5‘

- Homepage: https://github.com/shaioz/AFNetworking-AutoRetry

- Source: https://github.com/shaioz/AFNetworking-AutoRetry.git

- Versions: 0.0.5, 0.0.4, 0.0.3, 0.0.2, 0.0.1 [master repo] 搜索会出现不少版本,找到最新的就复制下版本,关闭终端从新操做。

五、须要在工程中根目录,工程下面建立一个Podfile文件,

 

platform :ios, '8.0'
#use_frameworks!//个别须要用到它,好比reactiveCocoa

target 'MyApp' do
  pod 'AFNetworking', '~> 2.6'
  pod 'ORStackView', '~> 3.0'
  pod 'SwiftyJSON', '~> 2.3'
end

 按这种格式输入不会报下面这种错误:

The dependency `` is not used in any concrete target
The dependency `AFNetworking ` is not used in any concrete target

 还有一种写法:

platform :ios, '8.0'
#use_frameworks!个别须要用到它,好比reactiveCocoa

def pods
  pod 'AFNetworking', '~> 2.6'
  pod 'ORStackView', '~> 3.0'
  pod 'SwiftyJSON', '~> 2.3'
end
target 'MyApp' do
  pods
end

 以后关闭工程,打开终端,cd进入工程目录,到有pod文件的那层。pod install便可,而后再次打开工程,打开.xcworkspace文件便可。

 

PrefixHeader.pch的使用:

1,新建pch文件,名字就是prefixHeader.pch

2,打开工程设置,building setting 搜索PrefixHeader,修改配置

根路径:$(SRCROOT)/工程名/PrefixHeader.pch 好比:$(SRCROOT)/新闻APP/PrefixHeader.pch 注意不能打错字母。

里面基本都是定义宏文件。

三,Const

宏与常/变量的选择?

  • 宏:只是在预处理器里进行文本替换,没有类型,不作任何类型检查,编译器能够对相同的字符串进行优化。只保存一份到 .rodata 段。甚至有相同后缀的字符串也能够优化,你能够用GCC 编译测试,"Hello world" 与 "world" 两个字符串,只存储前面一个。取的时候只须要给前面和中间的地址,若是是整形、浮点型会有多份拷贝,但这些数写在指令中。占的只是代码段而已,大量用宏会致使二进制文件变大
  • 变量:共享一块内存空间,就算项目中N处用到,也不会分配N块内存空间,能够被修改,在编译阶段会执行类型检查
  • 常量:共享一块内存空间,就算项目中N处用到,也不会分配N块内存空间,能够根据const修饰的位置设定可否修改,在编译阶段会执行类型检查
#define HSCoder @"汉斯哈哈哈"//宏,若是牵扯到计算,宏就不如Const好用了 NSString *HSCoder = @"汉斯哈哈哈";//变量 extern NSString *HSCoder;//extern  1.假如其余a类中已经声明了meString,你在另一个b类中想使用这个变量,能够extern NSString* meString;会获得a类中一样的值,且可从新赋值。 extern const NSString *HSCoder;//http://blog.csdn.net/sqq521/article/details/17465793 static const NSString *HSCoder = @"汉斯哈哈哈";//局部变量,外部不能访问。不然报错:
const NSString *HSCoder = @"汉斯哈哈哈"; NSString const *HSCoder = @"汉斯哈哈哈";//同上一个,常量指针,*HSCoder 不能修改,HSCoder 能够修改; NSString * const HSCoder = @"汉斯哈哈哈";//指针常量,HSCoder 不能修改,*HSCoder 能够修改。

 通常项目中,定义全局常量,会写在独立文件里

HSConst.m 定义常量:

HSConst.h 提供外接访问常量:

在AppDelegate中访问:

参考:http://www.jianshu.com/p/f83335e036b5

本站公众号
   欢迎关注本站公众号,获取更多信息