如何學習ios(摘自知乎https://www.zhihu.com/question/20016551)

著做權歸做者全部。
商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
做者:Wang Hailong
連接:https://www.zhihu.com/question/20016551/answer/13680483
來源:知乎

html

關於iOS開發的學習 打個比方就像把汽車分解
  • 最底層的原料有塑料 鋼鐵
  • 再用這些底層的東西造出來發動機 座椅
  • 最後再加上寫螺絲 膠水等 把汽車就拼起來了
iOS基本都是英文的資料 也因爲封閉 文檔寫的至關好
在遇到新框架的時候
  • 弄明白框架的功能
  • 去文檔裏搜搜 框架的 Programming Guide 頗有用
  • 要弄明白框架類的繼承結構
寫iOS的程序不必定都是用OBJC 不少框架是用C寫的
學習iOS開發基礎能夠按照下面兩個方面學
  1. 基礎 (原料 鋼鐵 塑料)
  • OBJ-C --- 語法弄明白 @interface @property 這些東西總要知道是幹嗎的 怎麼用
  • 基礎庫 --- NSString NSArray NSDictionary等 這些東西在全部的框架裏都會出現
    • iOS大部分類都是繼承自NSObject (我還沒見過不是繼承自NSObject的..)
    • 還有一些 像NSCopying的接口(經@李禹龍提醒 應該叫協議) 不是特別用到開始不用瞭解
    • NSObject 建立對象的時候用 + (id)alloc 方法 建立後須要init方法初始化 這個init指的是全部前面是init的方法好比UIView的初始化方法是 - (id)initWithFrame:(CGRect)aRect 在Objc裏有不少這樣關於函數命名的約定 相似於在python中的函數__xxx
    • NSString 字符串 NSArray 數組 NSDictionary 字典 這些都須要弄很清楚 其餘的類都是一個套路
    • NSMutableArray 這樣帶Mutable的類表明可變的 繼承自相應的不可變類 好比NSMutableArray繼承自NSArray 他們都添加了能夠改變對象內容的方法好比
      • - (void)addObject:(id)anObject 添加對象
      • - (void)removeObject:(id)anObject 刪除對象
    • 上面只是一個大概的總結 還有不少東西須要學 iOS5的SDK已經支持ARC 能夠自動進行release 可是對iOS4的支持還有一個小問題 如今要開發應用 可能還須要按照以前的MRC的方式alloc release retain autorelease 之類的內存管理方法 不過若是你如今開始學 到編出像樣的APP iOS5可能已經普及了 能夠直接用ARC (另 以前對ARC的瞭解很粗淺 如今開發程序徹底能夠直接ARC iOS4不支持的weak是有辦法替代的 用unsafe_unretained 若是同時支持iOS5和iOS4 用宏判斷下就能夠 固然也能夠直接用assign)
    • 還有一點開始學習的時候確定很疑惑 內存管理是基於函數名稱的 好比帶alloc copy的函數 用了以後返回的對象必定要release 這個不用疑惑 照作就好了
  • 文檔:
  1. 高級庫(發動機)
  • UIKit --- UI庫 OBJC
    • UIResponder 父類是NSObject UIKit裏最底層的庫 能夠響應一些觸摸事件 設置焦點等功能
    • UIView 父類是UIResponder 全部View的父類 方法太多了 大部分頗有用 這個不贅述了 中文的資料也不少了
    • 關於UIView的子類 有不少 UIButton UITableView 這個都須要各個擊破 看看文檔從名字上就很容易理解是作什麼的
    • UIViewController 是管理View 和 Model的類 (@張開 說UIViewController是用來管理view的,管理model 的類本身寫,固然,model也能夠用UIViewController來管理,不過恐怕成爲很差的代碼。 的確是這樣的 Model的改變最好經過Notification來傳播 以前吃過這樣的虧 最好不要用delegate模式)
      • UIViewController 管理全部設備發生的事件 好比屏幕旋轉 屏幕關閉 或者一些其餘的 程序的控制邏輯也應該寫在這裏
      • 他的初始化函數是- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 後面那個NibName 是Interface Builder 裏設計的界面
        • 如今IB已經集成到XCode裏了 打開.xib的文件打開的就是IB
        • IB和代碼交互用的是IBAction IBOutlet 這些標記 這些標記追蹤到他們的定義其實對編譯器來講什麼都不表示 只能IB識別
        • IB也沒那麼高深 XIB文件解開以後就是一堆代碼
        • 以前面過一家小公司 看我當時寫的程序裏面用到了IB 一臉不屑 說他們都是用代碼控制view 意思他們玩的都是高科技 IB都是垃圾 不少人也糾結到底用不用IB 的確 不少時候IB靈活度不行 可是不須要靈活度的時候還不用IB 那不是裝X嗎 要是沒人用蘋果還開發IB幹嗎 早去掉了 IB在不少時候節省不少工做量
    • UINavigationController 再說說NavigationController
      • 剛接觸開發的時候 不明白 View和View之間怎麼切換的 最重要的就是UINavigationController 他是一層一層推動view的 打開iPhone裏的聯繫人 每點一個聯繫人屏幕就會像右推到下一個界面 這就是UINavigationController在作的事
      • UINavigationController 維護一個堆棧
      • - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 是像堆棧裏壓一個UIViewController
      • - (UIViewController *)popViewControllerAnimated:(BOOL)animated 是從堆棧裏彈出來一個UIViewController
      • 就算你的程序不是像聯繫人那樣 向右推動 也能夠用UINavigationController 管理你的ViewController的層次 能夠本身寫View切換的動畫 關掉他默認的動畫
      • 文檔:
    • UIWindow 還有個蛋疼的UIWindow 都快忘了他了 由於iOS是從Mac os X過來的 不少東西直接拿來用 這個UIWindow就是 在iOS裏 每一個App獨佔屏幕 因此同時存在的只有一個UIWindow 除了在程序加載的時候把個人view 加載到他上 目前我還沒用到過其餘的
    • 蘋果一直很推崇MVC的程序結構 視圖 模型 控制器 簡單說就是 視圖負責顯示內容 模型負責全部數據的保存結構或者一些其餘數據操做 控制器是用來協調 視圖和模型 舉車的發動機系統的例子 視圖是儀表盤 模型是發動機 控制器是控制芯片
  • Core Data --- 管理數據 OBJC
    • 剛學的時候以爲 CD很高深 其實他是最容易用的庫之一 他麻煩之處在於多線程問題 還有膠水代碼的問題
    • 創建一個 基於Core Data的工程 你會看到他自動建立3個類的對象
      • NSManagedObjectModel
        • 管理數據的存儲結構文件 擴展名是 xcdatamodeld
      • NSPersistentStoreCoordinator
        • 用來管理底層數據的存儲 用官方的話說
          Core Data is not a relational database or a relational database management system (RDBMS).
        • 因此你能夠用不少方法存儲數據 好比最長用的sqlite 固然若是另類也能夠用plist文件 或者其餘
      • NSManagedObjectContext
        • NSManagedObjectContext 把上面兩個對象連在一塊兒 把他們變成一個總體
        • 全部的CD操做都是經過這個類的 這個須要仔細看文檔了
      • 舉個不恰當的例子 就像三我的收拾衣服 一我的負責衣服的存放位置(NSManagedObjectModel) 一我的負責把衣服分類 冬天穿 夏天穿等(NSPersistentStoreCoordinator) 一我的負責協調他們的工做 而且若是有新增長的衣服或者要移除以前的衣服 通知他倆(NSManagedObjectContext)
    • NSManagedObject 這個類是具體的數據對象 用上面的例子說就是衣服
      • 通常都是繼承這個對象 XCode 能夠幫你作 具體搜搜 這種文章不少
    • NSFetchRequest
      • 用來執行CD請求的 至關與select語句外殼
    • NSEntityDescription
      • 用來描述實體的 對應sql裏的table
    • NSPredicate
      • 謂語 相似select語句中的條件
    • 上面這三個類就能夠用來請求數據了 具體看教程吧
    • 中文介紹: (訪問須要點技術...)
    • 文檔:
掌握上面的內容 差很少就能寫個APP了 最好的學習方法就是邊寫邊學 本身構想一個小的APP 在作的時候遇到問題 去找找資料 我以爲這樣學習比較快 也比較紮實
下面這些庫都是有專門功能的庫
  • Core Animation --- 製做動畫 很強大 很喜歡的框架 能夠用少許的代碼寫出漂亮的動畫 C
  • Quartz 2D --- 強大的2D繪圖庫 C
  • OpenGL --- 不用介紹了 超級強大的3D庫 C
  • Core Image --- 據說 iOS5開始支持Core Image 了 還沒去看 Mac 上的CI是很強大的
  • CFNetwork --- 歷來沒用過 我通常都會用ASIHttpRequset 封裝好的高層網絡庫 OBJC實現的 CFNetwork 好像是C實現
  • Core Location --- 獲取位置的庫 東西不多 很簡單 OBJC
  • AVFoundation --- 播放視頻相關的庫 最近正在學習
這些算是學iOS開發的一些方法 當時要是有人告訴我這些 估計少走很多彎路
======================================================================
著做權歸做者全部。
商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
做者:Owen
連接:https://www.zhihu.com/question/20016551/answer/33781602
來源:知乎

首先,基礎很重要,其實就是學校的課程。數據結構和算法,設計模式,編譯原理,操做系統原理,再掌握一門語言好比c/c++,你會發現不少底層的類庫都是C寫的。並且能夠混編,特別是一些第三方的類庫直接就是C++寫的。其餘的包括T-Sql,html,js等你也能夠了解下,由於基於hyper link方式的開發也在發展。
而後,你就要看看iOS開發的武器庫了。入門的話能夠看看基本數,很好理解也很實用。
1.Beginning.iOS.5.Development.Exploring.the.iOS.SDK.Dec.2011
2.Learn_Objective-C_for_Java_Developers/ Objective-C編程之道
3. iOS 7 Programming Cookbook
這三本看下來你能夠作一些下項目了,可是這是遠遠不夠的,可能你知道可是用的時候就知道有些細節或者背後的機制沒有了解清楚,這個時候就要看文檔了。我不得不得不感慨,蘋果的文檔寫的太好了。我以前的列表,樓主能夠參考一下
一.預覽篇
1.Start Developing iOS Apps Today
Start Developing iOS Apps Today: iOS Technologies
#//apple_ref/doc/uid/TP40011343-CH11-SW1

2.iOS 2 Design Resources
Designing Great Apps.
①.iOS 7 UI Transtion Guide
②.iOS Human Interface GuideIines
③.UIKit User Interface Catelog


二.基礎篇
1.Objective-C Runtime Programming Guide
Objective-C Runtime Programming Guide: Introduction
Introduction/Introduction.html#//apple_ref/doc/uid/TP40008048

2.Programming With Objective-C
Programming with Objective-C: About Objective-C
Introduction/Introduction.html#//apple_ref/doc/uid/TP40011210

3.iOS Technology Overview
iOS Technology Overview: About the iOS Technologies
Introduction/Introduction.html#//apple_ref/doc/uid/TP40007898-CH1-SW1

4.View Programming Guide for iOS
View Programming Guide for iOS: View and Window Architecture
WindowsandViews/WindowsandViews.html#//apple_ref/doc/uid/TP40009503-CH2-SW1

5.View Controller Programming Guide for iOS
View Controller Programming Guide for iOS: About View Controllers
Introduction.html#//apple_ref/doc/uid/TP40007457

6.Scroll View Programming Guide for iOS
Scroll View Programming Guide for iOS: About Scroll View Programming
Introduction/Introduction.html#//apple_ref/doc/uid/TP40008179

7.Table View Programming Guide for iOS
Table View Programming Guide for iOS: Managing Selections
/ManageSelections/ManageSelections.html#//apple_ref/doc/uid/TP40007451-CH9-SW10

補充:Coding Guidinglines for Cocoa
Coding Guidelines for Cocoa: Introduction to Coding Guidelines for Cocoa
CodingGuidelines.html#//apple_ref/doc/uid/10000146i

三.技術篇
1.Auto Layout Guide
Auto Layout Guide: Introduction
Introduction/Introduction.html#//apple_ref/doc/uid/TP40010853

2.Advanced Memory management Programming Guide
Advanced Memory Management Programming Guide: About Memory Management
MemoryMgmt.html#//apple_ref/doc/uid/10000011i

3.Transitioning to ARC Rellease Notes
https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RNTransitioningToARC/
Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226

4.Threading Programming Guide
Threading Programming Guide: About Threaded Programming
AboutThreads.html#//apple_ref/doc/uid/10000057i-CH6-SW2

5.Networking Programming Topic
Networking Programming Topics: Introduction
Introduction/Introduction.html#//apple_ref/doc/uid/TP40012488

6.Core Data Programming Guide
Core Data Programming Guide: Managed Object Models
#//apple_ref/doc/uid/TP40002328-SW1

7.Core Data Model Versioning And Data Migration
Core Data Model Versioning and Data Migration Programming Guide: Core Data Model Versioning and Data Migration

8.Core Image Programming Guid
Core Image Programming Guide: About Core Image

9.Core Animation Propramming Guid
Core Animation Programming Guide: Core Animation Basics
//apple_ref/doc/uid/TP40004514-CH2-SW3

補充:Concurrency Programming Guide
Concurrency Programming Guide: Concurrency and Application Design
/ConcurrencyandApplicationDesign/ConcurrencyandApplicationDesign.html#//apple_ref/doc/uid
/TP40008091-CH100-SW1

iTunes Connection Developer Guild


這些不是說一會兒看過,根據工做的狀況。看完這些的話你會有一個質的飛躍。這些基本上涵蓋你開發當中經常使用的方面。遇到問題能夠到CocoaChina,StackOverflow等問答網站去問,還有就是看每一年的WWDC的視頻,算是對文檔的補充。

最後,經過實際的項目綜合提升本身,不作項目談技術都是耍流氓,具體有幾個方面。關注高手寫的博客,文章質量都很高,很是有助於提升。還有就是研究開源的類庫,好比AFNetworking,SDWebImage等,會綜合提升你的編程技巧。再加上不斷的實踐,不斷提升。而後過搞搞Git,常去GitHub看看,你會發現不少的好的東西。
推薦幾個本身常常去的一些博客和網站
唐巧的技術博客
objc中國
Ray Wenderlich
CocoaDocs.org
NSHipster
Luke's Homepage
Cocoabit | 作本身喜歡的事情

固然,以上知道技術上的東西。你最好還要知道點設計,懂點用戶,知道點市場就更好了。但願能幫到你!
===================================================================

推薦一本書,《iOS應用逆向工程》http://book.douban.com/subject/25826902/ 這裏面就有相關的關於iOS底層的一些原理。python

對於實現方法這些,推薦一本《Objective-C編程之道:iOS設計模式解析》http://book.douban.com/subject/6920082/ios

相關文章
相關標籤/搜索