如何才能系統(tǒng)的學(xué)習(xí) iOS 開(kāi)發(fā)汇歹,理解一些規(guī)則和深層次的機(jī)制原理?

今天我給大家講下我是怎么學(xué)習(xí)ios開(kāi)發(fā)的

我當(dāng)時(shí)剛學(xué)iOS開(kāi)發(fā)的時(shí)候一樣的感覺(jué) 總想知道原理 內(nèi)部怎么回事 感覺(jué)在像在霧里

但是iOS開(kāi)發(fā)就是這樣 他是封閉的 本身就是在霧里...

關(guān)于iOS開(kāi)發(fā)的學(xué)習(xí) 打個(gè)比方就像把汽車分解

最底層的原料有塑料 鋼鐵

再用這些底層的東西造出來(lái)發(fā)動(dòng)機(jī) 座椅

最后再加上寫螺絲 膠水等 把汽車就拼起來(lái)了

iOS基本都是英文的資料 也由于封閉 文檔寫的相當(dāng)好

在遇到新框架的時(shí)候

弄明白框架的功能

去文檔里搜搜 框架的 Programming Guide 很有用也可以加下:點(diǎn)擊鏈接加入群【ios開(kāi)發(fā)學(xué)習(xí)】:https://jq.qq.com/

要弄明白框架類的繼承結(jié)構(gòu)

寫iOS的程序不一定都是用OBJC 很多框架是用C寫的

學(xué)習(xí)iOS開(kāi)發(fā)基礎(chǔ)可以按照下面兩個(gè)方面學(xué)

基礎(chǔ) (原料 鋼鐵 塑料)

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

基礎(chǔ)庫(kù) --- NSString NSArray NSDictionary等 這些東西在所有的框架里都會(huì)出現(xiàn)

iOS大部分類都是繼承自NSObject (我還沒(méi)見(jiàn)過(guò)不是繼承自NSObject的..)

還有一些 像NSCopying的接口(經(jīng)@李禹龍?zhí)嵝?應(yīng)該叫協(xié)議) 不是特別用到開(kāi)始不用了解

NSObject 創(chuàng)建對(duì)象的時(shí)候用 + (id)alloc 方法 創(chuàng)建后需要init方法初始化 這個(gè)init指的是所有前面是init的方法比如UIView的初始化方法是 - (id)initWithFrame:(CGRect)aRect 在Objc里有很多這樣關(guān)于函數(shù)命名的約定 類似于在python中的函數(shù)__xxx

NSString 字符串 NSArray 數(shù)組 NSDictionary 字典 這些都需要弄很清楚 其他的類都是一個(gè)套路

NSMutableArray 這樣帶Mutable的類代表可變的 繼承自相應(yīng)的不可變類 比如NSMutableArray繼承自NSArray 他們都添加了可以改變對(duì)象內(nèi)容的方法比如

- (void)addObject:(id)anObject 添加對(duì)象

- (void)removeObject:(id)anObject 刪除對(duì)象

上面只是一個(gè)大概的總結(jié) 還有很多東西需要學(xué) iOS5的SDK已經(jīng)支持ARC 可以自動(dòng)進(jìn)行release 但是對(duì)iOS4的支持還有一個(gè)小問(wèn)題 現(xiàn)在要開(kāi)發(fā)應(yīng)用 可能還需要按照之前的MRC的方式alloc release retain autorelease 之類的內(nèi)存管理方法 不過(guò)如果你現(xiàn)在開(kāi)始學(xué) 到編出像樣的APP iOS5可能已經(jīng)普及了 可以直接用ARC (另 之前對(duì)ARC的了解很粗淺 現(xiàn)在開(kāi)發(fā)程序完全可以直接ARC iOS4不支持的weak是有辦法替代的 用unsafe_unretained 如果同時(shí)支持iOS5和iOS4 用宏判斷下就可以 當(dāng)然也可以直接用assign)

還有一點(diǎn)開(kāi)始學(xué)習(xí)的時(shí)候肯定很疑惑 內(nèi)存管理是基于函數(shù)名稱的 比如帶alloc copy的函數(shù) 用了之后返回的對(duì)象一定要release 這個(gè)不用疑惑 照做就行了

視頻教程:


ios軟件開(kāi)發(fā)視頻教程

高級(jí)庫(kù)(發(fā)動(dòng)機(jī))

UIKit --- UI庫(kù) OBJC

UIResponder 父類是NSObject? UIKit里最底層的庫(kù) 可以響應(yīng)一些觸摸事件 設(shè)置焦點(diǎn)等功能

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

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

UIViewController? 是管理View 和 Model的類 (@張開(kāi) 說(shuō)UIViewController是用來(lái)管理view的偿凭,管理model 的類自己寫产弹,當(dāng)然,model也可以用UIViewController來(lái)管理弯囊,不過(guò)恐怕成為不好的代碼取视。 的確是這樣的 Model的改變最好通過(guò)Notification來(lái)傳播 之前吃過(guò)這樣的虧 最好不要用delegate模式)

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

他的初始化函數(shù)是- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 后面那個(gè)NibName 是Interface Builder 里設(shè)計(jì)的界面

現(xiàn)在IB已經(jīng)集成到XCode里了 打開(kāi).xib的文件打開(kāi)的就是IB

IB和代碼交互用的是IBAction IBOutlet 這些標(biāo)記 這些標(biāo)記追蹤到他們的定義其實(shí)對(duì)編譯器來(lái)說(shuō)什么都不表示 只能IB識(shí)別

IB也沒(méi)那么高深 XIB文件解開(kāi)之后就是一堆代碼

之前面過(guò)一家小公司 看我當(dāng)時(shí)寫的程序里面用到了IB 一臉不屑 說(shuō)他們都是用代碼控制view 意思他們玩的都是高科技 IB都是垃圾 很多人也糾結(jié)到底用不用IB 的確 很多時(shí)候IB靈活度不行 但是不需要靈活度的時(shí)候還不用IB 那不是裝X嗎 要是沒(méi)人用蘋果還開(kāi)發(fā)IB干嘛 早去掉了 IB在很多時(shí)候節(jié)省很多工作量

UINavigationController 再說(shuō)說(shuō)NavigationController

剛接觸開(kāi)發(fā)的時(shí)候 不明白 View和View之間怎么切換的 最重要的就是UINavigationController 他是一層一層推進(jìn)view的 打開(kāi)iPhone里的聯(lián)系人 每點(diǎn)一個(gè)聯(lián)系人屏幕就會(huì)像右推到下一個(gè)界面 這就是UINavigationController在做的事

UINavigationController 維護(hù)一個(gè)堆棧

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 是像堆棧里壓一個(gè)UIViewController

- (UIViewController *)popViewControllerAnimated:(BOOL)animated 是從堆棧里彈出來(lái)一個(gè)UIViewController

就算你的程序不是像聯(lián)系人那樣 向右推進(jìn) 也可以用UINavigationController 管理你的ViewController的層次 可以自己寫View切換的動(dòng)畫 關(guān)掉他默認(rèn)的動(dòng)畫

點(diǎn)擊鏈接加入群【ios開(kāi)發(fā)學(xué)習(xí)】:https://jq.qq.com/

UIWindow 還有個(gè)蛋疼的UIWindow 都快忘了他了 因?yàn)閕OS是從Mac os X過(guò)來(lái)的 很多東西直接拿來(lái)用 這個(gè)UIWindow就是 在iOS里 每個(gè)App獨(dú)占屏幕 所以同時(shí)存在的只有一個(gè)UIWindow 除了在程序加載的時(shí)候把我的view 加載到他上 目前我還沒(méi)用到過(guò)其他的

蘋果一直很推崇MVC的程序結(jié)構(gòu) 視圖 模型 控制器 簡(jiǎn)單說(shuō)就是 視圖負(fù)責(zé)顯示內(nèi)容 模型負(fù)責(zé)所有數(shù)據(jù)的保存結(jié)構(gòu)或者一些其他數(shù)據(jù)操作 控制器是用來(lái)協(xié)調(diào) 視圖和模型 舉車的發(fā)動(dòng)機(jī)系統(tǒng)的例子 視圖是儀表盤 模型是發(fā)動(dòng)機(jī) 控制器是控制芯片

Core Data --- 管理數(shù)據(jù) OBJC

剛學(xué)的時(shí)候覺(jué)得 CD很高深 其實(shí)他是最容易用的庫(kù)之一 他麻煩之處在于多線程問(wèn)題 還有膠水代碼的問(wèn)題

建立一個(gè) 基于Core Data的工程 你會(huì)看到他自動(dòng)創(chuàng)建3個(gè)類的對(duì)象

NSManagedObjectModel

管理數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)文件 擴(kuò)展名是 xcdatamodeld

NSPersistentStoreCoordinator

用來(lái)管理底層數(shù)據(jù)的存儲(chǔ) 用官方的話說(shuō)

Core Data is not a relational database or a relational database management system (RDBMS).

所以你可以用很多方法存儲(chǔ)數(shù)據(jù) 比如最長(zhǎng)用的sqlite 當(dāng)然如果另類也可以用plist文件 或者其他

NSManagedObjectContext

NSManagedObjectContext 把上面兩個(gè)對(duì)象連在一起 把他們變成一個(gè)整體

所有的CD操作都是通過(guò)這個(gè)類的 這個(gè)需要仔細(xì)看文檔了

舉個(gè)不恰當(dāng)?shù)睦?就像三個(gè)人收拾衣服 一個(gè)人負(fù)責(zé)衣服的存放位置(NSManagedObjectModel) 一個(gè)人負(fù)責(zé)把衣服分類 冬天穿 夏天穿等(NSPersistentStoreCoordinator) 一個(gè)人負(fù)責(zé)協(xié)調(diào)他們的工作 并且如果有新增加的衣服或者要移除之前的衣服 通知他倆(NSManagedObjectContext)

NSManagedObject 這個(gè)類是具體的數(shù)據(jù)對(duì)象 用上面的例子說(shuō)就是衣服

一般都是繼承這個(gè)對(duì)象 XCode 可以幫你做 具體搜搜 這種文章很多

NSFetchRequest

用來(lái)執(zhí)行CD請(qǐng)求的 相當(dāng)與select語(yǔ)句外殼

NSEntityDescription

用來(lái)描述實(shí)體的 對(duì)應(yīng)sql里的table

NSPredicate

謂語(yǔ) 類似select語(yǔ)句中的條件

上面這三個(gè)類就可以用來(lái)請(qǐng)求數(shù)據(jù)了 具體看教程吧

掌握上面的內(nèi)容 差不多就能寫個(gè)APP了 最好的學(xué)習(xí)方法就是邊寫邊學(xué) 自己構(gòu)想一個(gè)小的APP 在做的時(shí)候遇到問(wèn)題 去找找資料 我覺(jué)得這樣學(xué)習(xí)比較快 也比較扎實(shí)點(diǎn)擊鏈接加入群【ios開(kāi)發(fā)學(xué)習(xí)】:https://jq.qq.com/

下面這些庫(kù)都是有專門功能的庫(kù)

Core Animation --- 制作動(dòng)畫 很強(qiáng)大 很喜歡的框架 可以用少量的代碼寫出漂亮的動(dòng)畫 C

Quartz 2D --- 強(qiáng)大的2D繪圖庫(kù) C

OpenGL --- 不用介紹了 超級(jí)強(qiáng)大的3D庫(kù) C

Core Image --- 聽(tīng)說(shuō) iOS5開(kāi)始支持Core Image 了 還沒(méi)去看 Mac 上的CI是很強(qiáng)大的

CFNetwork --- 從來(lái)沒(méi)用過(guò) 我一般都會(huì)用ASIHttpRequset 封裝好的高層網(wǎng)絡(luò)庫(kù) OBJC實(shí)現(xiàn)的 CFNetwork 好像是C實(shí)現(xiàn)

Core Location --- 獲取位置的庫(kù) 東西很少 很簡(jiǎn)單 OBJC

AVFoundation --- 播放視頻相關(guān)的庫(kù) 最近正在學(xué)習(xí)

這些算是學(xué)iOS開(kāi)發(fā)的一些方法 當(dāng)時(shí)要是有人告訴我這些 估計(jì)少走不少?gòu)澛?/p>

還有提醒各位初學(xué)者 剛開(kāi)始學(xué)的時(shí)候 會(huì)有幾個(gè)月的低谷期 很容易放棄 如果挺過(guò)最開(kāi)始的幾個(gè)月 后來(lái)就越學(xué)越容易了

PS: 第一次寫這么多東西 可能有些地方層次不夠清晰 或者 詞語(yǔ)用的不正確 歡迎拍磚

有感興趣的可以加下ios開(kāi)發(fā)交流QQ群:626加上433最后463這樣你就可以搜到我們?nèi)豪铮硗馊豪镆灿幸恍┵Y料可以分享給大家學(xué)習(xí)下

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末常挚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子稽物,更是在濱河造成了極大的恐慌奄毡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贝或,死亡現(xiàn)場(chǎng)離奇詭異吼过,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)咪奖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門盗忱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人羊赵,你說(shuō)我怎么就攤上這事趟佃。” “怎么了昧捷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵闲昭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我靡挥,道長(zhǎng)序矩,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任跋破,我火速辦了婚禮簸淀,結(jié)果婚禮上瓶蝴,老公的妹妹穿的比我還像新娘。我一直安慰自己租幕,他們只是感情好舷手,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著令蛉,像睡著了一般聚霜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上珠叔,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天蝎宇,我揣著相機(jī)與錄音,去河邊找鬼祷安。 笑死姥芥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汇鞭。 我是一名探鬼主播凉唐,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼霍骄!你這毒婦竟也來(lái)了台囱?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤读整,失蹤者是張志新(化名)和其女友劉穎簿训,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體米间,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡强品,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屈糊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片的榛。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逻锐,靈堂內(nèi)的尸體忽然破棺而出夫晌,到底是詐尸還是另有隱情,我是刑警寧澤昧诱,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布慷丽,位于F島的核電站,受9級(jí)特大地震影響鳄哭,放射性物質(zhì)發(fā)生泄漏要糊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锄俄。 院中可真熱鬧局劲,春花似錦、人聲如沸奶赠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)毅戈。三九已至苹丸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苇经,已是汗流浹背赘理。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扇单,地道東北人商模。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蜘澜,于是被迫代替她去往敵國(guó)和親施流。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Swift版本點(diǎn)擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,326評(píng)論 7 249
  • 《紅薔薇白玫瑰》G.E.M.鄧紫棋 “夢(mèng)里是鮮紅的薔薇趟章,睜眼是蒼白的玫瑰∩魍酰” 第一次聽(tīng)到鄧紫棋唱這首歌,就被她獨(dú)特...
    密斯安閱讀 3,790評(píng)論 0 1
  • 原文地址:https://hexige.github.io/blog/2017/07/24/LruCache/ 使...
    hxg_閱讀 236評(píng)論 0 1
  • 不知不覺(jué)中宏侍,畢設(shè)結(jié)束了赖淤,大學(xué)快畢業(yè)了,回想四年的大學(xué)生活谅河,卻是虛度了咱旱,大多的時(shí)間空耗在追悼一個(gè)從來(lái)沒(méi)有存在過(guò)...
    落木疏影閱讀 280評(píng)論 1 1
  • 快捷鍵列表 通用 ↑↓←→:上下左右移動(dòng)光標(biāo),注意不是不是KJHL绷耍! Alt:調(diào)出菜單 Ctrl + Shift ...
    wumiss閱讀 217評(píng)論 0 0