iOS快速入門

國慶後lucio開始由Android開發轉做iOS開發了,在這之前lucio可是什麼蘋果產品都沒用過的小白,這裏po一下小白的iOS開發學習歷程,包括看的書、視頻、文章,看看lucio如何從小白快速(並不快┓( ´∀` )┏其實)入門iOS開發的。

1. Objective-C語言入門

《Objective-C基礎教程》,很好。這裏整理下後面幾章的學習筆記,方便複習。

《Objective-C基礎教程》第8章 Foundation Kit介紹

《Objective-C基礎教程》第9章 內存管理

《Objective-C基礎教程》第10章 對象初始化

《Objective-C基礎教程》第11章 屬性

《Objective-C基礎教程》第12章 類別

《Objective-C基礎教程》第13章 協議

《Objective-C基礎教程》第14章 代碼塊和併發性

2. iOS開發入門

(1) 斯坦福白鬍子老頭iOS8視頻

斯坦福大學公開課:iOS 8開發

這個公開課每個iOS版本都有,基本是用一個demo來講解iOS開發,每個版本的demo都不一樣,iOS7是用Objective-C的,我也是看完了才知道,但看iOS8的課程也是能同步用Objective-C完成demo的,兩邊的方法名稱完全一樣,只有語法的不同。

貼一下里面關於MVC模式的講解

MVC模式

  1. Model與View不能通信:Model與UI完全獨立,UI組件都是generic的,需要Controller爲其翻譯並格式化Model的信息用於顯示。
  2. Controller->View:View裏的UI組件以outlet形式存在於Controller中。
  3. View->Controller:Controller自己註冊target,告訴View當有指定的action(如按鈕點擊)發生時,發送這個action給我這個target。View通過delegate將should、will、did等動作的響應交給Controller處理。View不擁有其顯示的數據,它是通過data source(也算一種特殊的delegate)從Controller那裏拿數據,而數據來自Model。
  4. Model->Controller:Model將自己的屬性變化通過廣播發送給感興趣的訂閱者(一般是Controller),Notification & KVO,然後Controller去Model中取新的數據。

mvc

(2) 《瘋狂iOS講義》

看隨書的源碼可以快速瞭解各種控件的使用,以及圖形、動畫相關知識。

3. 閱讀與思考

Part 1 - 代碼規範

(1) 代碼風格

Round 1 - Raywenderlich.com官方代碼風格指南 :]

The official raywenderlich.com Objective-C style guide.

中文翻譯:http://blog.it985.com/10771.html

需要多注意裏面一些細節的東西:

  1. copy和strong的選擇:把一個對象賦值給一個屬性變量,當這個對象變化了,如果希望屬性變量變化就使用strong屬性,如果希望屬性變量不跟着變化,就是用copy屬性。
  2. 推薦使用代碼提示中宏定義的NS_ENUM()枚舉模塊來創建,它可以提供更嚴謹的類型檢測和代碼補完功能。
  3. 私有變更應該在類的私有類別中,不需要加private等詞語來進行修飾。
  4. 私有類別可以在命名爲<headerfile>+Private.h的文件裏提供。
  5. init方法中返回值使用instancetype取代id作爲返回。[原因]
  6. 單例必須線程安全。
  7. :]
Round 2 - 總結自己的View層的組織規範

總結一套自己的View代碼規範,日後需要慢慢完善。

// 通用viewController/view代碼結構

 #pragma mark - LifeCycle Menthod
 - (void)viewDidLoad {
     [super viewDidLoad];
     [self initView()];
     [self initData()];
 }

 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
 }

 - (void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
 }

 - (instancetype)init {}
 - (void)dealloc {}

 #pragma mark - Delegate Menthod

 #pragma mark - Event response
 - (void)xxxClick(){
 }

 #pragma mark - Public

 #pragma mark - Private
 - (void)initView{
     //DO initView
     [self initConstrains()];
 }

 - (void)initConstrains{
     //DO initConstrains
 }

 - (void)initData{
     //DO initData
 }

 #pragma mark - getter && setter

 // 1. 屬性(特別是View)的初始化放在getter,在initView裏面只addSubview。
 // 2. 關於第1點的lazy initialization,對於需要判空的,線程不安全的以及自動優化相關的屬性需要多加考慮。
 // 3. initConstrains用於初始化約束,儘量使用makeConstraints,如果約束需要動態更新,重寫updateViewConstraints或updateConstraints

關於註釋第2點:

Round 3 - 惰性初始化的優劣

Good or bad practice? Initializing objects in getter

lazy initialization,對於需要判空的,線程不安全的以及自動優化相關的屬性需要多加考慮,原因如上。

(2) iOS工程的目錄結構

Round 1 - iOS項目工程及目錄結構

iOS項目工程及目錄結構

區分不同層次的通用組件。

  • General Level, 最通用的組件,可以在不同項目裏複用。
  • Project Level, 可以在該項目裏複用。
  • Section Level, 可以在某個功能模塊裏複用。
Round 2 - 參考例子

iOS 項目的目錄結構能看出你的開發經驗

兩個例子可以大概參考下。

Part 2 - 第三方庫

(1) iOS開發的包管理

CocoaPods

CocoaPods安裝和使用教程

Carthage

Carthage 包管理工具,另一種敏捷輕快的 iOS & MAC 開發體驗

CoaoaPods 是一套整體解決方案,我們在 Podfile 中指定好我們需要的第三方庫。然後 CocoaPods 就會進行下載,集成,然後修改或者創建我們項目的 workspace 文件,這一系列整體操作。

相比之下,Carthage 就要輕量很多,它也會一個叫做 Cartfile 描述文件,但 Carthage 不會對我們的項目結構進行任何修改,更不多創建 workspace。它只是根據我們描述文件中配置的第三方庫,將他們下載到本地,然後使用 xcodebuild 構建成 framework 文件。然後由我們自己將這些庫集成到項目中。Carthage 使用的是一種非侵入性的哲學。

(2) 常用的第三方庫

Masonry

Masonry是一個輕量級的佈局框架 擁有自己的描述語法 採用更優雅的鏈式語法封裝自動佈局 簡潔明瞭 並具有高可讀性 而且同時支持 iOS 和 Max OS X Masonry介紹與使用實踐

AFNetworking

AFNetWorking一款輕量級網絡請求開源框架,基於iOS和mac os 網絡進行擴展的高性能框架 IOS 網絡請求之 AFNetWorking 3.x 使用

FMDB

FMDB是iOS平臺的SQLite數據庫框架,FMDB以OC的方式封裝了SQLite的C語言API [iOS]數據庫第三方框架FMDB詳細講解 FMDB 使用方法

libextobjc

libextobjc一個提供語言級別各種小功能的庫

FLEX 應用內調試神器

SDWebImage 圖片加載框架

Reachability 檢測手機網絡狀態

MJRefresh 下拉刷新,上拉加載更多組件

Toast Toast

MBProgressHUD 半透明提示框

DateTools 用於提高Objective-C中日期和時間相關操作的效率 DateTools使用「日期工具庫」

更多:

iOS開發常用三方庫、插件、知名博客等等

iOS 第三方庫、插件、知名博客總結

Part 3 - 技巧篇

(1) 自動佈局

Round 1 - UIScrollview與Autolayout

UIScrollview與Autolayout

scrollView比較特殊,因爲它有個contentSize的屬性。ScrollView的contentSize的大小是由其subview的constraints來決定的。

爲了正常顯示,使用一個單一的containerView佔滿全部,然後把所有的subview添加到containerView中。(親測)

Round 2 - 約束代碼何處安放

Where should I be setting autolayout constraints when creating views programmatically?

How to Use updateConstraints?

updateViewConstraints與updateConstraints可以在需要更新大量約束時重寫,對於只初始化一次而不需要修改的約束,寫到類似於viewDidLoad的方法中比較好。

Round 3 - 一個坑

The Mystery of the +requiresConstraintBasedLayout

基於約束的佈局是懶觸發的,只有在添加了約束的情況下,系統纔會自動調用 -updateConstraints 方法,如果把所有的約束放在 updateConstraints中,那麼系統將會不知道你的佈局方式是基於約束的,所以重寫+requiresConstraintBasedLayout 返回YES就是明確告訴系統:雖然我之前沒有添加約束,但我確實是基於約束的佈局!這樣可以保證系統一定會調用 -updateConstraints 方法 從而正確添加約束。

(2) weakSelf

透徹理解block中weakSelf和strongSelf

__weak __typeof(self)weakSelf = self;
[self.context performBlock:^{
    __strong __typeof(weakSelf)strongSelf = weakSelf;
    [strongSelf doSomething];
}];

當block直接或間接的被self持有時,需要weakSelf。其他情況下加weakSelf也沒什麼問題。

使用libextobjc庫可以簡化下代碼:

#import "EXTScope.h"

@weakify(self)
[self.context performBlock:^{
    @strongify(self)
    [self doSomething];
}];

(3) iOS應用數據存儲

iOS本地數據存取,看這裏就夠了

  1. XML屬性列表(plist)歸檔
  2. Preference(偏好設置)
  3. NSKeyedArchiver歸檔(NSCoding)NSKeyedArchiver–對象歸檔
  4. SQLite3
  5. Core Data
// TODO: 2017/10/23 繼續完善本文直到結束入門

When they are needed, comments should be used to explain why a particular piece of code does something. Any comments that are used must be kept up-to-date or deleted.

——The official raywenderlich.com Objective-C style guide.

(4) iOS單例模式

JAVA設計模式之單例模式

使用dispatch_once創建單例

(5) UI適配

Round 1 - ViewController的佈局

ViewController的幾個屬性:edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets、extendedLayoutIncludesOpaqueBars

http://www.jianshu.com/p/ea9e19b7d69f

http://www.jianshu.com/p/9884f13074b8

Round 2 -如何做好IOS View的佈局

如何做好IOS View的佈局

  • 如何佈局UIViewController的view
  • childViewController的處理
  • Autolayout來佈局
  • tableView管理

佈局原則:

  • 屏幕尺寸變化時能自適應,如不同尺寸設備,屏幕旋轉,熱點,電話等。
  • 無論是否有navigationBar或tabBar都能夠正常顯示,且最好不需要自己去判斷有沒有navigationBar或tabBar
  • 儘量避免hard code間距,如20,44,49等

(6) Effective Objective-C 2.0編寫高質量iOS與OS X代碼的52個有效方法

《Effective Objective-C 2.0:編寫高質量iOS與OS X代碼的52個有效方法》閱讀筆記

// TODO: 2017/10/25 不再更新,之後學到的知識單獨分類整理  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章