《iOS開發(fā)進階》
作者:唐巧
統(tǒng)計分析工具
Flurry: 國外軟件炎疆,專門針對移動的做了優(yōu)化奉瘤,統(tǒng)計流量小勾拉,數(shù)據(jù)安全性高
友盟:國內(nèi)軟件,對國內(nèi)開發(fā)者比價友善〉廖拢現(xiàn)已被阿里收購藕赞,當(dāng)業(yè)務(wù)涉及到與阿里沖突時,統(tǒng)計數(shù)據(jù)會有潛在的安全性問題卖局。這也是京東不支持使用支付寶的原因斧蜕。
App Annie : 一款專門為開發(fā)者提供,針對App store 的統(tǒng)計分析工具吼驶,可以統(tǒng)計下載量惩激、排名變化店煞、銷售收入情況及用戶評價等。
App Figures: 和App Annie 類似的統(tǒng)計分析工具风钻。
崩潰日志記錄工具
Crashlytics: 國外軟件顷蟀,信息收集能力強,使用免費骡技,安全鸣个。
Xcode 插件管理工具:Alcatraz
可以集成到 Xcode 管理 插件、模板布朦、及顏色配置工具囤萤。
安裝方法如下圖:
IMG_1320.JPG
常用的Xcode 插件
KSImageNamed: 自動匹配圖片資源名
XVim:一個Xcode 的vim 編輯模式插件
FuzzyAutocompletePlugin:代碼自動補全插件,Xcode 7.3以上的版本現(xiàn)都已支持是趴。
XToDo : 一個查找項目中所有帶有 TODO, FIXME, !!! 等的標記注釋涛舍。
BBUDebuggerTuchAway:一個當(dāng)結(jié)束調(diào)試后,自動隱藏調(diào)試窗口的小插件唆途。
SCXcodeSwithExpander : 能迅速在switch 語句中填補所有可能的case:的插件富雅。
deriveddata-exterminator: 一款可以在xcode 菜單清除xcode 緩存的插件,解決一下奇怪的編譯錯誤信息肛搬。
VVDocumenter : 一款快速文檔注釋插件没佑,Xcode 8 現(xiàn)已集成,使用 cmd + option + /
鍵即可添加温赔。ClangFormat : 一個自動調(diào)整代碼風(fēng)格的工具蛤奢。
ColorSense : 一個使用UIColor 創(chuàng)建顏色時,能實時預(yù)覽當(dāng)前顏色
-
XcodeBoost : 包含多個輔助修改代碼的小功能陶贼,比如:
可以將.m 文件中方法的定義暴露到.h文件中
可以將一個源文件中直接輸入正則表達式查找
可以復(fù)制粘貼代碼時不啟用Xcode的自動縮進功能啤贩。
ImageOptim : 一款圖片壓縮工具,比Xcode 自帶的pngcrush 壓縮工具的壓縮比率要高骇窍。需要給ipa 包瘦身時可以采用此軟件瓜晤。
蒲公英: 一款應(yīng)用App的內(nèi)測分發(fā)工具,國內(nèi)軟件腹纳,使用比較方便
xctool : 一個Facebook開源的 iOS 編譯和測試工具痢掠。純命令行工具
apledoc : 一款從源代碼中抽取文檔的工具。
內(nèi)存管理
weak 弱引用修飾的對象嘲恍,雖然持有對象足画,但是引用計數(shù)不會增加,所以可以避免循環(huán)引用佃牛。
為了兼容非ARC的三方庫淹辞,可以在
compile sources
中為對應(yīng)的.m 文件增加編譯參數(shù)-fno-objc-arc
來允許對部分文件關(guān)閉ARC。
開發(fā)技巧
- UILabel 顯示模糊:UIlabel 的frame 的origin 值如果有小數(shù)就會參數(shù)此問題俘侠,修改為整數(shù)后即可解決象缀。
- NSJSONSerialization 比 NSKeyedArchiver 做數(shù)據(jù)持久化更方便快捷蔬将,性能更好
- UIView 添加動畫效果方法是類方法,所以當(dāng)中的block 絕不會產(chǎn)生循環(huán)引用央星。
- Xcode 快捷鍵:
cmd + shift + o : 快速查找工程中的類和方法
ESC :調(diào)出代碼補全窗口
注意:
js 文件被拖到工程后霞怀,是在編譯列表中,而不是在資源列表中莉给,需要手動的調(diào)整其位置毙石,否則不能打包到ipa 文件中,解決方法如下:
由于js文件不需要編譯颓遏,需要將js文件從Compile Source
編譯列表中移動到copy Bundle Resources
中徐矩。
清除DerivedData : 當(dāng)xcode 緩存異常,莫名出現(xiàn)編譯錯誤時叁幢,可以嘗試清除這里的緩存數(shù)據(jù) ~/Library/Developer/Xcode/DerivedData
為工程增加 Daily Build 腳本
學(xué)習(xí)一門腳本語言(js滤灯、Python),可以提高開發(fā)效率曼玩,自動化批處理一些繁雜重復(fù)性強的事情
代碼片段用戶內(nèi)容替換命令:<#輸入被替換的內(nèi)容#>
Block 對象模型
block 內(nèi)部數(shù)據(jù)結(jié)構(gòu)定義:
IMG_1323.JPG
解釋:
- isa 指針力喷,所有對象都有該指針,用于實現(xiàn)對象相關(guān)的功能
- flags 演训, 用于按bit 位表示一下block的附加信息
- reserved ,保留變量
- invoke 贝咙,函數(shù)指針样悟,指向具體的block實現(xiàn)的函數(shù)調(diào)用地址
- descriptor,表示該block的附加描述信息
- variables 庭猩,capture(捕捉)過來的變量窟她,block能夠訪問他外部的局部變量,就是因為將這些變量(變量的地址)復(fù)制到了結(jié)構(gòu)體
OC 中的3各種Block 類型
- _NSConcreteGlobalBlock蔼水,全局的靜態(tài)block震糖,不會訪問任何外部變量。
- _NSConcreteStackBlock趴腋,保存在棧中的block吊说,當(dāng)函數(shù)返回時會被銷毀。
- _NSConcreteMallocBlock优炬,保存在堆中的block颁井,當(dāng)引用技數(shù)為0時銷毀。
Block 對外部變量的復(fù)制
對于block外的變量引用:block默認是將其復(fù)制到其數(shù)據(jù)結(jié)構(gòu)中來實現(xiàn)訪問的蠢护。如果這個對象是一個引用類型雅宾,則block 會將其引用計數(shù)加1
對于__block 修飾的外部變量引用:block 是復(fù)制其引用地址來實現(xiàn)訪問的。
圖示:
IMG_1324.JPG
- 在ARC中block 只有
NSConcreteGlobalBlock葵硕、NSConcreteMallocBlock
眉抬,這2中類型存在贯吓,因為ARC 機制已經(jīng)能很好的管理對象的生命周期,所以這樣的block 類型對于系統(tǒng)來說方便管理蜀变。
其他
**適合UIWindow 來實現(xiàn)的功能: **
- 手勢解鎖匹颤,密碼輸入界面
- 應(yīng)用的啟動介紹頁
- 應(yīng)用內(nèi)的通知提醒顯示
- 應(yīng)用內(nèi)的彈框廣告
App 用戶登陸密碼安全傳輸策略:
事先生成一對用于加密的公私鑰,客戶端在登陸時胧后,使用公鑰將用戶的密碼加密后俊犯,將密文傳輸?shù)椒?wù)器。服務(wù)器使用私鑰將密碼解密贤惯,然后加鹽之后再多次求MD5洼专,之后再和服務(wù)器原來存儲的用相同方法處理過的密碼匹配,如果一致孵构,則登陸成功屁商。