CocoaPods+PrefixHeader.pch+Const


Cocoapods意義體現在兩個方面。第一,在引入第三方庫時它可以自動為我們完成各種各樣的配置,包括配置編譯階段、連接器選項、甚至是ARC環境下的-fno-objc-arc配置等。第二,使用CocoaPods可以很方便地查找新的第三方庫,這些類庫是比較“標准的”,而不是網上隨便找到的,這樣可以讓我們找到真正好用的類庫。

CocoaPods的核心組件

CocoaPods是用Ruby寫的,並划分成了若干個Gem包。

CocoaPods在解析執行過程中最重要的幾個包的路徑分別是:CocoaPods/CocoaPods、 CocoaPods/Core和 CocoaPods/Xcodeproj。

CocoaPods / CocoaPod:這是面向用戶的組件,每當執行一個pod命令時,這個組件將被激活。它包括了所有實用CocoaPods的功能,並且還能調用其他gem包來執行任務。

CocoaPods / Core:Core gem提供了與CocoaPods相關的文件(主要是podfile和podspecs)的處理。

 

Podfile:該文件用於配置項目所需要的第三方庫,它可以被高度定制。本文中我們主要在這里做動作。

Podspec:該文件描述了一個庫將怎樣被添加進工程中。.podspec文件可以標識該第三方庫所需要的源碼文件、依賴庫、編譯選項,以及其他第三方庫需要的配置。

CocoaPods / Xcodeproj:這個包負責處理工程文件,它能創建以及修改.xcodeproj文件和.xcworkspace文件。它也可以作為一個獨立的包使用,當你要編寫修改項目文件的腳本時,可以考慮使用CocoaPods/Xcodeproj。

 

Cocoapods安裝步驟

1、升級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升級完成。

 

2、安裝CocoaPods時我們要訪問cocoapods.org,該網站可能被我們大天朝牆了,這樣下載安裝可能會是龜速,幸好我們可以用淘寶的Ruby鏡像來訪問該網站,方法如下:

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

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

可以使用下面的命令(紅色部分)查看是否更換鏡像成功(如下圖所示):
$ gem sources -l

 

3、安裝Cocoapods,在終端輸入命令

$sudo gem install cocoapods

這個時候會提示你輸入密碼,注:在終端輸入密碼不會有提示,光標也不會移動,一定要注意

開始安裝,如下圖:PS:這個過程可能花費時間比較長

 

安裝成功如下:

 

4、使用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] 搜索會出現很多版本,找到最新的就復制下版本,關閉終端重新操作。

5、需要在工程中根目錄,工程下面創建一個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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM