iOS 開發中的 Tips(一)

發表於2016-11-16

背景

這幾天被和的話題討論著。

第45任美國總統大選,我感覺他們兩誰當選美國總統都挺沒意思的,他們把太多時間和精力放在了人身攻擊上,而沒有怎麼為國家發展、人民的生活考慮太多。只能說(我說出來會不會坐牢啊?你們不認同可以罵我啊,you happy jiu ok):

川普不夠靠譜、希拉蕊不夠誠實

Lesser of two evils 兩害相權取其輕

任職在電商公司的我,對於雙十一隻想說剁手就行了^_^(沒毛病)

11970779-0544a88087fb73c9
Lesser of two evils.png

前言

在簡書上寫了幾篇部落格,之前在別的平臺或自己搭建的部落格都寫過。怎麼說呢,其實寫部落格就是一個學習的過程,你會收集資料,看別人部落格,看官方文件,但是有一點不會變,你看別人的部落格時本身就是一個學習的過程,關鍵部落格或者官方文件裡面的知識,我學會了,我理解了,這就變成我自己的知識了,這就是我最大的收穫!**

我部落格裡面的知識都是經過我實踐驗證而來的(當然也有很多理解不透徹的地方),我寫部落格的目的不外乎兩個^_^:

1.督促自己學習,方便查詢知識點
2.交朋友,交流技術和看法

我在發開過程中有可能遇到一個個小知識點,有時候不用就會忘記,所以我想記錄一下方便以後忘記查詢,時間長了用的多了就記住了!每篇部落格會更新 6 個Tips,為什麼是6個,因為6對於我有很多不解之情。我會持續更新這個Tips哦

學習6個小Tips

那就跟我一起學習小知識點吧.目錄如下:

  1. 修改Mac終端(Terminal)裡不同型別檔案的顯示顏色
  2. 修改Mac終端(Terminal)的提示文字
  3. Mac終端顯示/隱藏檔案命令
  4. 被忽略的dispatch_block_t
  5. NSAssert()和NSParameterAssert()的使用
  6. FOUNDATION_EXPORT的使用

1. 修改Mac終端(Terminal)裡不同型別檔案的顯示顏色

我們開發經常會使用Terminal,可以說頻繁使用(推薦終端工具iTem 2,也是我前leader推薦給我的)。很多人認為使用Terminal逼格很高,其實呢就是逼格很高^_^。Mac OS下ls命令預設是單色輸出,如下:

12970779-4126389790f89646
ls單色輸出介面.png

我們開啟檔案~/.bash_profile,新增下面內容,儲存檔案,重新開啟終端執行即可:

解釋:

  • SCLICOLOR是用來設定是否進行顏色的顯示。CLI是Command Line Interface的縮寫。
  • LSCOLORS是用來設定當CLICOLOR被啟用後,各種檔案型別的顏色。LSCOLORS的值中每兩個字母為一組,分別設定某個檔案型別的文字顏色和背景顏色。LSCOLORS中一共11組顏色設定,按照先後順序,分別對以下的檔案型別進行設定(經過我測試有好幾個不生效,基本夠用):
13970779-775c1adfd1fad2f9
ls 多色輸出介面.png

2. 修改Mac終端(Terminal)的提示文字

環境變數PS1就是終端的提示文字格式,預設為“\h:\W \u\$”,可以用echo來檢視:
echo $PS1
PS2則是換行後的提示符,預設為“>”。
部分可使用的格式有:

如只想顯示命令號,可以輸入如下命令:
PS1=”\#: “
改成Linux風格可執行:
PS1=”[\u@\h \W]\$ “

但是退出後這些環境變數就丟失了,要永久生效的話,可以在~/.bash_profile~/.profile/etc/profile(需要管理員許可權)裡進行設定,儲存檔案,重新開啟終端: 你們可以自定義自己想顯示的

14970779-9c67ff296757a74f
終端提示文字修改.png

3. Mac終端顯示/隱藏檔案命令

在開發過程中經常會修改隱藏檔案,比如上面的.bash_profile.gitignore等等,我們可以

當然我們可以再mac下顯示和隱藏所有隱藏檔案:

4. 被忽略的dispatch_block_t

我們經常在開發中定義一個回撥block,既沒有引數也沒有返回值。我們會在專案裡這樣定義 :

但是系統已經有一個幫我們定義了一個這樣的block,只是我們忽略了,那就是

我建議如果遇到需要這樣的block,那就直接使用這個block,簡單方便。反正我不會再自己定義了!

5. NSAssert()和NSParameterAssert()的使用

我們在開發中對於物件經常為nil或者條件不滿足,而導致程式出現bug或者崩潰,我們還不好定位那裡出現了問題,現在我就簡單介紹NSAssert()NSParameterAssert()丟擲異常來定位這種問題的出現。

  • NSAssert()

NSAssert()是個巨集,用於開發階段除錯程式中的Bug,通過為NSAssert()傳遞條件表示式來斷定是否屬於Bug,滿足條件返回真值,程式繼續執行,如果返回假值,則丟擲異常,並且可以自定義異常描述,NSAssert()可以出現在程式的任何一個位置。

異常資訊:定位到問題類的某一行

NSAssertassert都是斷言,主要的差別是assert在斷言失敗的時候只是簡單的終止程式,而NSAssert會報告出錯誤資訊並且列印出來.所以只使用NSAssert就好,可以不去使用assert。

NSAssertNSCAssert區別不大,作用都是一樣。一個定義oc的,一個定義c的。都可以使用!具體巨集定義大家可以點選進去看。

  • NSParameterAssert()

NSParameterAssert()也是一個巨集定義,它只是針對引數是否存在的斷言。

異常資訊:定位到問題類的某一行

NSParameterAssertNSCparameterAssert 兩者的區別也是前者適用於Objective-C的方法,後者適用於C的函式。

Xcode 已經預設將release環境下的斷言取消了, 免除了忘記關閉斷言造成的程式不穩定. 所以不用擔心 在開發時候大膽使用。

15970779-9d3412ae3afa2519
斷言開啟.png

總結:NSAssert/NSCAssertNSParameterAssert/NSCparameterAssert 的區別是前者是針對條件斷言, 後者只是針對引數是否存在的斷言。

6. FOUNDATION_EXPORT的使用

我們經常開發的時候會定義一些常量之類的,我們會用到 #define比如:

而是用 FOUNDATION_EXPORT 如下:

使用FOUNDATION_EXPORT方法在檢測字串的值是否相等的時候效率更快.
可以直接使用(string == AFURLSessionDidInvalidateNotification)來比較, 而#define則使用的是([string isEqualToString: AFURLSessionDidInvalidateNotification])哪個效率更高,顯而易見了

FOUNDATION_EXPORT是直接比較指標地址
#define是一一比較字串的每一個字元是否相等.

我們要多使用 FOUNDATION_EXPORT

結尾:

今天講解的都是很簡單的Tips,希望在開發中多多使用,提升開發效率哦。

我會持續更新Tips的(除非我轉職業了),如果對你有幫助。希望點個喜歡加個關注哦^_^

相關文章