#pragma mark
大家好,我是小編Vicky,今天是國慶節的第二天,由于天氣較熱,下午就不打算出去玩了,就學習了一波#pragma,可能大多數猿猿們都用到過.例如下面的例子:
可能大家看到這面的#pragma mark -ViewController 說這不就是我們常見的區分代碼塊的嗎?在這里小編說,對并沒有錯,我們經常用它來區分各個功能的代碼塊,如ViewController的生命周期,TableView的delegate和datasource,內存警告,還有一些點擊事件等.例如下面這樣可以迅速的找到對應的方法.
整理代碼
作為好的程序員,不僅在技術能力上會比較強以外,他的代碼也很有條理,很容易使人看明白.
但是現實中程序員不注意自己的代碼整理(當然還有我咯),我們使用第三方,不僅要理解他們的實現思路,更應該學習他們的代碼規范,比如AFNetworking的代碼,還有系統的代碼,無論是從注釋還是格式化上都是我們值得學習的.代碼整理相當于衛生問題,就算你衣著光鮮亮麗的去上班,但是當別人看到你寫的代碼,還是那么的邋遢,你的整體印象也不會很好.所以做好代碼整理很重要.而#pragma的使用就可能在一小部分上解決我們代碼散亂不堪的問題.將屬于一個功能,或者是一個代理方法的放在一起,方便后面的人查找和review.
好了現在就說這些了,以后這種問題還得自己慢慢學習.我也正在學習一些代碼規范.希望大家多多提意見.
防止警告
現在如果你正在有Xcode正在運行項目,那么隨著我來改幾個東西,你就會發現干什么,什么都報錯,Xcode進入了一種困難模式.
再將
一個空的項目我還啥都沒干就開始報錯了,看下圖:
哈哈不要慌,第一個警告是導入UIkit框架報錯,那是因為我們設置了Weverything標志出現的錯誤,stackOverFlow上游錯誤的解釋和解決辦法,那就是使用@ import,@ import是你不需要添加框架在項目設置,自動完成。
實際上你不需要使用@ import關鍵字。如果您選擇使用模塊,所有進口#和# include指令自動映射到使用@ import。現在我們先可以將其關掉.
在ViewController.h中申明一個方法,我們來看看會發生什么.
我們申明方法,但是為實現,在原本的Xcode中是沒有什么問題的但是剛才我們將所有的警告和錯誤打開后看看會發生什么.
在.m文件中錯誤提示我們我們申明的方法沒有找到,但是如果我們在.m文件將其方法實現了,錯誤就消失了.為什么會這樣了.先來科普一波吧,原來我們沒有設置treat warnings as error的話,只是提示警告,說沒有方法實現,但是設置完之后就會報錯,原因就是我們設置的這個其實是將設置Xcode將warning總是當作error來處理.就是以前我們寫的所有的可能會發生警告的代碼都會提示為錯誤,比如申明變量卻沒有用到等問題.如果你是一個注重代碼質量并且習慣困難模式下開發的話,可以嘗試打開這個設置,如果不是那還是請你關上吧.再看一個問題就是我們常常用到switch語句,早默認最后都有一個default來結束.但是當打開上面兩個選項后會報出錯誤.
我們都知道枚舉值都是NSinteger類型,所以默認的default是必要的保障,也就是有默認的值,但是我們從來就沒有指定default的值,這是就很尷尬,也不知道該怎樣解決是,我們想到了AFNetworking中的
可能我們在查看af源代碼的同時會看到過這樣的代碼,當我們將其注釋掉時,會編譯報錯.但是將其放開時,就沒有什么錯誤.那到底是為什么啦.在靜態分析器編譯代碼過程中發現了block中強引用了self,并警告可能發生保留環,最終導致循環引用.釋放不掉.在af中setCompletionBlock中在塊結束時將強引用置為nil來解決這個問題.
clang為我們提供了去除某段特定代碼的警告問題那就是使用
可是警告有很多種我們該如何做到改取消某一個警告啦.(http://fuckingclangwarnings.com/)可以通過這個鏈接去查看和學習.
好了今天就先說到這吧,學習的來源來自于AFNetworking的作者的http://nshipster.cn/clang-diagnostics/的學習,大家可以自行進行了解學習.
如果喜歡小編,可以點擊關注,我會不定期的更新一些文章,也可以關注我的專題
本人聯系方式:qq:513961360
email:513961360@qq.com
也可以加我們的qq群希望能與朋友們一起聊天和學習.群里還有很多iOS開發者,幫助我們解決問題,并且同時學習.
qq群號:580284575