如何系統(tǒng)學習ios

本人大四學生,用iOS設備兩年多了,真正的接觸開發(fā)有半年時間吧,之前Java基礎還行。現在感覺有點小瓶頸脆炎,很多東西僅僅限于會用或者按照規(guī)范依葫蘆畫瓢梅猿,但不知道深層次的原理以及為什么這樣做,感覺知識學習不夠系統(tǒng)秒裕,經常遇到一些NS類不知所以袱蚓,翻查Apple的docs有時也看不太懂(可能有外語水平問題,但應該不是主要原因)几蜻,比如NSApplication喇潘、NSOperation、NSRunLoop等梭稚。哪位前輩能指點一下進一步的學習方法颖低?”? Wang Hailong 的回復的投票數最高,整理如下:

我當時剛學iOS開發(fā)的時候一樣的感覺弧烤,總想知道原理忱屑,內部怎么回事,感覺在像在霧里暇昂。但是iOS開發(fā)就是這樣莺戒,它是封閉的 本身就是在霧里…

關于iOS開發(fā)的學習,打個比方就像把汽車分解:

最底層的原料有塑料急波,鋼鐵

再用這些底層的東西造出來發(fā)動機从铲,座椅

最后再加上寫螺絲,膠水等澄暮,把汽車就拼起來了

iOS基本都是英文的資料名段,也由于封閉,文檔寫的相當好赏寇。在遇到新框架的時候:

弄明白框架的功能

去文檔里搜搜 框架的 Programming Guide 很有用

要弄明白框架類的繼承結構

寫iOS的程序不一定都是用OBJC吉嫩,很多框架是用C寫的。學習iOS開發(fā)基礎可以按照下面兩個方面學:

基礎 (原料 鋼鐵 塑料)

OBJ-C — 語法弄明白 @interface @property 這些東西總要知道是干嘛的 怎么用

基礎庫 — NSString NSArray NSDictionary等 這些東西在所有的框架里都會出現

iOS大部分類都是繼承自NSObject (我還沒見過不是繼承自NSObject的..)

還有一些 像NSCopying的接口(經@李禹龍?zhí)嵝?應該叫協議) 不是特別用到開始不用了解

NSObject 創(chuàng)建對象的時候用 + (id)alloc 方法 創(chuàng)建后需要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的支持還有一個小問題 現在要開發(fā)應用 可能還需要按照之前的MRC的方式alloc release retain autorelease 之類的內存管理方法 不過如果你現在開始學 到編出像樣的APP iOS5可能已經普及了 可以直接用ARC (另 之前對ARC的了解很粗淺 現在開發(fā)程序完全可以直接ARC iOS4不支持的weak是有辦法替代的 用unsafe_unretained 如果同時支持iOS5和iOS4 用宏判斷下就可以 當然也可以直接用assign)

還有一點開始學習的時候肯定很疑惑 內存管理是基于函數名稱的 比如帶alloc copy的函數 用了之后返回的對象一定要release 這個不用疑惑 照做就行了

文檔:CocoaFundamentals Introduction

高級庫(發(fā)動機)

UIKit — UI庫 OBJC

UIResponder 父類是NSObject UIKit里最底層的庫 可以響應一些觸摸事件 設置焦點等功能

UIView 父類是UIResponder 所有View的父類 方法太多了 大部分很有用 這個不贅述了 中文的資料也很多了

關于UIView的子類 有很多 UIButton UITableView 這個都需要各個擊破 看看文檔從名字上就很容易理解是做什么的

UIViewController 是管理View 和 Model的類 (@張開 說UIViewController是用來管理view的嗅定,管理model 的類自己寫自娩,當然,model也可以用UIViewController來管理渠退,不過恐怕成為不好的代碼忙迁。 的確是這樣的 Model的改變最好通過Notification來傳播 之前吃過這樣的虧 最好不要用delegate模式)

UIViewController 管理所有設備發(fā)生的事件 比如屏幕旋轉 屏幕關閉 或者一些其他的 程序的控制邏輯也應該寫在這里

他的初始化函數是- (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嗎 要是沒人用蘋果還開發(fā)IB干嘛 早去掉了 IB在很多時候節(jié)省很多工作量

UINavigationController 再說說NavigationController

剛接觸開發(fā)的時候 不明白 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的程序結構 視圖 模型 控制器 簡單說就是 視圖負責顯示內容 模型負責所有數據的保存結構或者一些其他數據操作 控制器是用來協調 視圖和模型 舉車的發(fā)動機系統(tǒng)的例子 視圖是儀表盤 模型是發(fā)動機 控制器是控制芯片

Core Data — 管理數據 OBJC

剛學的時候覺得 CD很高深 其實他是最容易用的庫之一 他麻煩之處在于多線程問題 還有膠水代碼的問題

建立一個 基于Core Data的工程 你會看到他自動創(chuàng)建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

用來執(zhí)行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 — 播放視頻相關的庫 最近正在學習也可以加下我們QQ群:626-433-463

這些算是學iOS開發(fā)的一些方法,當時要是有人告訴我這些碎乃,估計少走不少彎路姊扔。還有提醒各位初學者,剛開始學的時候會有幾個月的低谷期梅誓,很容易放棄恰梢。如果挺過最開始的幾個月佛南,后來就越學越容易了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嵌言,隨后出現的幾起案子嗅回,更是在濱河造成了極大的恐慌,老刑警劉巖摧茴,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绵载,死亡現場離奇詭異,居然都是意外死亡苛白,警方通過查閱死者的電腦和手機娃豹,發(fā)現死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來购裙,“玉大人懂版,你說我怎么就攤上這事』捍埽” “怎么了定续?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵后控,是天一觀的道長御雕。 經常有香客問我,道長冤留,這世上最難降的妖魔是什么恩掷? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任倡鲸,我火速辦了婚禮,結果婚禮上黄娘,老公的妹妹穿的比我還像新娘峭状。我一直安慰自己,他們只是感情好逼争,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布优床。 她就那樣靜靜地躺著,像睡著了一般誓焦。 火紅的嫁衣襯著肌膚如雪胆敞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天杂伟,我揣著相機與錄音移层,去河邊找鬼。 笑死赫粥,一個胖子當著我的面吹牛观话,可吹牛的內容都是我干的。 我是一名探鬼主播越平,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼频蛔,長吁一口氣:“原來是場噩夢啊……” “哼灵迫!你這毒婦竟也來了?” 一聲冷哼從身側響起晦溪,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤龟再,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尼变,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡浆劲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年嫌术,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牌借。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡度气,死狀恐怖,靈堂內的尸體忽然破棺而出膨报,到底是詐尸還是另有隱情磷籍,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布现柠,位于F島的核電站院领,受9級特大地震影響,放射性物質發(fā)生泄漏够吩。R本人自食惡果不足惜比然,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望周循。 院中可真熱鬧强法,春花似錦、人聲如沸湾笛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嚎研。三九已至蓖墅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘉赎,已是汗流浹背置媳。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留公条,地道東北人拇囊。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像靶橱,于是被迫代替她去往敵國和親寥袭。 傳聞我的和親對象是個殘疾皇子路捧,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容