原创 iOS應用層架構之CDD

從2010年開始接觸iOS開發到現在,折騰過不少app的架構。從MVC到MVVM,VIPER,MVP,以及最新的ReactiveCocoa都做過實戰嘗試,還有其他變種,諸如猿題庫iOS客戶端架構設計,也做過一些學習研究。這些技術概念如果

原创 JSPatch 實現原理詳解

JSPatch 是一個 iOS 動態更新框架,只需在項目中引入極小的引擎,就可以使用就可以使用 JavaScript 調用任何 Objective-C 原生接口,獲得腳本語言的優勢:爲項目動態添加模塊,或替換項目原生代碼動態修復 bug

原创 Facebook iOS 應用是如何加速圖片顯示的?

你的Facebook的動態消息中充滿着一些關於你朋友、家人以及你所愛的人的照片,也許你會想要在手機上也能重溫那些場景。我們一直在尋找提升用戶體驗的方式,包括更優秀和更快的移動端體驗。爲了達到這個目標,我們團隊仔細研究瞭如何在 iOS 設

原创 iOS 開發者的 Android 第一課

隨着移動軟件工業的發展,一個移動產品只侷限於 iOS 系統變得越來越不切實際。 Android 目前佔有近 80% 的智能手機份額[^1],它能給一個產品帶來的潛在用戶量實在不能再被忽略了。 在本文中,我會在 iOS 的開發範圍內介紹

原创 iOS到Android到底有多遠

在iOS開發混了4年之後,又重拾荒廢了4年的Android,感慨時間過得太快,有時間我會回顧下2010當年的iOS/Android平臺的萌芽期歷史; 從重拾摸索,再到上線兩個App,四五個月時間。這段時間的學習和研究,頗多衝擊和體會,

原创 第一個開源庫

AAMultiSelectController 地址:https://github.com/aozhimin/AAMultiSelectController 歡迎提PR AAMultiSelectController provides

原创 【Tip來1發】去除Preferred Max Layout Width警告

去除Preferred Max Layout Width警告 當 IB 中的 UILabel 的行數不是1,且 Deploy Target 小於iOS8時,很可能會遇到下面的警告: 一個可行的解決辦法是將 UILab

原创 AutoLayout代碼控制約束是否起作用

今天在做一個需求的時候需要在TableView動態控制約束是否起作用,NSConstraint這個類主要有三個方式實現: 1.通過active設置,但這個只在iOS8.0以上能用 2.7.0可以通過對這個約束所附加的'view來addCo

原创 【搬運】實現一個有意思的TODO宏

實現一個能產生warning的TODO宏,用於在代碼裏做備忘,效果: 下面一步步來實現這個宏。 Let’s do it 手動讓編譯器報警(報錯)可以用以下幾個方法: #warning sunnyxx #error sunny

原创 關於 weak 變量的一個奇怪問題

來自關注這個公衆號的一個朋友(何哈哈...Newber)的留言提問,下面是簡化的代碼: 這是個很有難度的問題,希望大家一起討論下爲什麼會這樣,之後我會發一下我的理解。

原创 launch once 與 dispatch once

昨天發了個 launch once 的 code snippet  陸續有朋友和我討論,今天詳細解釋下。 launch once 這段代碼實現了在一個 Engine 對象生命週期內只能調用一次 launch 方法:

原创 Notification Once

前段時間整理項目中的AppDelegate,發現很多寫在- application:didFinishLaunchingWithOptions:中的代碼都只是爲了在程序啓動時獲得一次調用機會,多爲某些模塊的初始化工作,如: - (B

原创 Objective-C Ivar Layout 探索

這次探索源於一個朋友問的問題,當我們定義一個類的實例變量的時候,可以指定其修飾符: @interface Sark : NSObject { __strong id _gayFriend; // 無修飾符的對象默認會加 __

原创 巧用 Class Extension 分離接口依賴

Class Extension 和 Category 是我們經常使用的 Objective-C 語法: // Class Extension @interface Sark () @end // Category @interfa

原创 【Tip來3發】繼續編譯有Error的工程

當你把某個重要接口改了的時候,全工程將會有若干編譯錯誤,但默認情況編譯器遇到第一個錯誤之後就會停止Build,那麼你就需要這個Tip: