關於iOS開發的學習,打個比方就像把汽車分解:
最底層的原料有塑料,鋼鐵
再用這些底層的東西造出來發動機,座椅
最後再加上寫螺絲,膠水等,把汽車就拼起來了
iOS基本都是英文的資料,也由於封閉,文檔寫的相當好。在遇到新框架的時候:
弄明白框架的功能
去文檔裏搜搜 框架的 Programming Guide 很有用
要弄明白框架類的繼承結構
寫iOS的程序不壹定都是用OBJC,很多框架是用C寫的。學習iOS開發基礎可以按照下面兩個方面學:
基礎 (原料 鋼鐵 塑料)
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 這個不用疑惑 照做就行了
文檔:CocoaFundamentals Introduction
高級庫(發動機)
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切換的動畫 關掉他默認的動畫
文檔: /ViewControllerPGforiPhoneOS/ModalViewControllers
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開發的壹些方法,當時要是有人告訴我這些,估計少走不少彎路。還有提醒各位初學者,剛開始學的時候會有幾個月的低谷期,很容易放棄。如果挺過最開始的幾個月,後來就越學越容易了。