201808-28 iOS 利用AFNetworking實現大文件分片上傳 概述一說到文件上傳,想必大家都并不陌生,更何況是利用AFNetworking(PS:后期統稱AF)來做,那更是小菜一碟。比如開發中常見的場景:頭像上傳,九宮格圖片上傳...等等,這些場景無一不使用到文件上傳的功能。如果利用AF來實現,無非就是客戶端調用AF提供的文件上傳接口即可,API如下所示:-(nullableNSURLSessionDataTask*)POST:(NSString*)URLStringparameters:(nullableid)para... 繼續閱讀 >
201807-22 iOS-性能優化深入探究 上圖是幾種時間復雜度的關系,性能優化一定程度上是為了降低程序執行效率減低時間復雜度。如下是幾種時間復雜度的實例:O(1)returnarray[index]==value;O(n)for(inti=0,i<n,i++){if(array[i]==value)returnYES;}O(n2)///找數組中重復的值for(inti=0,i<n,i++){for(intj=0,j<n,j++){if(i!=j&&array[i]==array[j]){... 繼續閱讀 >
201807-11 iOS內存管理:從MRC到ARC實踐 對于iOS程序員來說,內存管理是入門的必修課。引用計數、自動釋放等概念,都是與C語言完全不同的。搞明白這些,代碼才有可能不crash。然而就是這么牛逼的內存管理,著實讓我這個從C轉過來的老程序員頭疼了一段時間。[C++程序員的迷惑和憤怒]iOS內存管理的核心是引用計數。與眾多五年甚至更多以上開發經驗的程序員一樣,筆者當初是從C/C++轉到的OC,接觸到MRC。當時遇到最頭疼的問題就是:為什么那么多releas... 繼續閱讀 >
201806-20 YYModel 源碼剖析:關注性能 前言json與模型的轉換框架很多,YYModel一出,性能吊打同類組件,終于找了些時間觀摩了一番,確實收益頗多,寫下此文作為分享。由于該框架代碼比較多,考慮到突出重點,壓縮篇幅,不會有太多筆墨在基礎知識上,很多展示源碼部分會做刪減,重點是在理解作者思維。讀者需要具備一定的runtime知識,若想閱讀起來輕松一些,最好自己打開源碼做參照。一、框架的核心思路使用過框架的朋友應該很熟悉如下的這些方法... 繼續閱讀 >
201711-30 iOS面試題:阿里-P6一面-參考思路 阿里-p6-一面 1.介紹下內存的幾大區域?2.你是如何組件化解耦的?3.runtime如何通過selector找到對應的IMP地址4.runloop內部實現邏輯?5.你理解的多線程?6.GCD執行原理?7.怎么防止別人反編譯你的app?8.YYAsyncLayer如何異步繪制?9.優化你是從哪幾方面著手?1.介紹下內存的幾大區域?1.棧區(stack)由編譯器自動分配并釋放,存放函數... 繼續閱讀 >
201711-08 iOS中的MVP模式初探 以前在項目中都寫的是MVC模式,由于現在在項目中要學習MVP模式,所以找了一個Demo研究了一下.就簡單說說自己的看法吧.先說一下MVC模式,示意圖如下:MVC模式示意圖模型拿到數據,可能是數據庫或者網絡數據最簡單的比方,我們拿到一個模型數組了之后,這個就相當于是一個數據源.將數據傳遞給控制器,控制器經過簡單地加工數據源經過簡單地處理加工,比如在tableView中,我們... 繼續閱讀 >
201710-25 最近很火的 Safe Area 到底是什么 iOS7之后蘋果給UIViewController引入了topLayoutGuide和bottomLayoutGuide兩個屬性來描述不希望被透明的狀態欄或者導航欄遮擋的最高位置(statusbar,navigationbar,toolbar,tabbar等)。這個屬性的值是一個length屬性(topLayoutGuide.length)。這個值可能由當前的ViewController或者NavigationController或者TabbarController決定。一個獨立的ViewController,不包含于任何其他的ViewControll... 繼續閱讀 >
201710-13 iOS藍牙開發CoreBluetooth框架總結 最近兼職公司一個項目設計藍牙項目,在開發過程中踩了不少坑,做了一些簡單的整理以及總結,在此順便分享一下。概念iOS開發中,談到藍牙現在基本最常使用的框架就是CoreBluetooth框架了,使用該框架可以iOS設備與藍牙設備或者iOS設備與其他非藍牙設備的交互。藍牙開發分為兩種:中心者模式和管理者模式中心者模式我們的手機作為中心設備,連接藍牙設備(這也是最常用的一種模式,比如使用我們的手機連接... 繼續閱讀 >
201709-26 2017年排名前11的iOS應用分析工具 似乎每年都有越來越多的移動分析工具,2017年也是如此,所以用戶很難在這么多iOS應用程序選擇使用哪一個,或者說,用戶將不止使用一個分析工具。開發人員傾向于使用各種分析工具來幫助他們全面了解iOS應用程序,每一個工具都可以為你提供一個獨特的應用程序視圖,以及它的執行情況。我們對iOS開發者在2017年使用的iOS應用分析工具進行了廣泛的研究,發現這11個是最好的。Firebase(谷歌應用分析工具)“Appsuccessm... 繼續閱讀 >
201709-25 App開發團隊必須知道的 iOS 11 更新點 WWDC2017已經過去差不多一個季度了,最近隨著Xcode9正式版以及iPhone8、iPhoneX的發布,iOS11的全面適配也被提上了日程。我整理了一下更新點,包括開發、設計、產品甚至是市場都應該注意的點,分享出來希望對大家有所幫助。新增框架ARKitiOS11引入了新的ARKit框架,讓您輕松創建無可比擬的iPhone和iPad增強現實體驗。通過將數字對象和信息與您周圍的環境相融合,ARKit為App解開了屏幕之縛,... 繼續閱讀 >
201709-21 iOS開發:為你的應用兼容iPhone X 每年蘋果爸爸都會在六月份的WWDC上發布有關下一代iOS的新特性和改動內容,開發者們有半年時間去準備和兼容最新版本的iPhone和操作系統。但是這一次為了在發布會前不泄露iPhoneX的相關信息(實際上我們早就知道了=。=),蘋果直到前幾天才在官網上線了兼容全面屏的指導文檔和視頻。離iPhoneX正式上市還有兩個月不到的時間,我們需要為我們的app做哪些準備呢?屏幕我們在編碼中使用的是以point為單位的屏幕尺寸(... 繼續閱讀 >
201709-01 『libextobjc』Objctive-C 協議的默認實現 繼續閱讀libextobjc的源碼,看到一個非常有趣的實現——Objective-C的protocol默認實現。當然,這不比Swift的extension默認實現,Objective-C在這方面沒有Swift強大,并不能完全的實現POP,但是這不妨給我們提供一種思路。首先,列舉一下當面對這個問題時,都有哪些疑問:會用到方法注入,但是什么時候注入?以什么形式獲取默認實現的SEL與IMP?怎樣減少性能開銷?然后,我們... 繼續閱讀 >
201708-09 iOS中實現一個支持小數的星星評分組件 在很多電商,外賣,餐飲型應用里,都會在商品結束后評價中有一個星星組件。核心思路就是用UIControl并自定義實現其中的trackTouch的幾個方法。而顯示不到一個的星星,比如半個星星的思路是根據分數切割星星的圖像并顯示其中一部分。實現后效果如下。單個星星的實現對于單個星星的實現,先考慮星星有三個狀態,完全置灰狀態,完全高亮狀態,根據百分比半高亮狀態。而我這邊用的是UIButton來實現,因為UIButton本身已... 繼續閱讀 >
201707-24 那些設計iOS API需要知道的事 為了能夠將我們項目中的代碼能夠在后續開發者使用(重用代碼),通常使用的方法是將代碼按照功能模塊編寫成API。那么我們就很有必要了解Objective-C語言中常見的編程范式(paradigm),同時還需了解各種可能碰到的陷阱。命名命名沖突的問題Objective-C沒有其他語言的那種內置命名空間(namespace)機制。因此,我們只能自己想辦法來解決命名沖突問題。最常用的解決方式就是,仿照其他語言(C++)建立自己的namespac... 繼續閱讀 >
201707-10 八年iOS老開發的五點心得 本文作者從2009年開始進行iOS系統的開發工作,中間參與開發了無數款應用。本文就是結合他多年心得,總結出的一些能夠讓應用開發更高效、更有趣且更具可維護性的方法。1、保持源生如果代碼保持源生平臺,就不會真正出錯。任何跨平臺的技術都可能會增加復雜性,并有可能給項目引入bug。此外,報告的實際節省時間差異也很大。目前,我們只聽說過有大型項目因跨平臺而感到后悔,而未曾聽說過大型項目因保持源生而感到后悔的... 繼續閱讀 >
201707-06 從iOS的圖片圓角想到渲染 圓角是一種很常見的視圖效果,相比于直角,它更加柔和優美,易于接受。設置圓角會帶來一定的性能損耗,如何提高性能是一個需要重點討論的話題。大家常見的圓角代碼x.layer.cornerRadius=xx;x.clipsToBounds=YES;這兩行確實實現了圓角視覺效果。其實使用x.layer.cornerRadius=xx;已經實現了圓角,只不過在某些控件是不生效的,因為某些圖層在被切割圓角圖層之上而被顯示出來了。而x.clipsToBounds=YES;帶來的... 繼續閱讀 >