斯坦福的iOS7公開課,在網(wǎng)易公開課上學(xué)習(xí)這門課时鸵,一共18集胶逢,希望每天我能在這里記錄下我的學(xué)習(xí)步伐,記錄學(xué)習(xí)心得。
如有不當(dāng)之處宪塔。請指點我這個小渣渣磁奖。
/* 這是一段注釋 好久沒寫了,又回顧一遍某筐,寫寫心得體會比搭。*/
How to build cool apps
第一節(jié)課由白胡子老頭講解如何構(gòu)建一個應(yīng)用
講解斯坦福學(xué)習(xí)這們課程的一些必要條件,(不得不佩服國外的學(xué)校南誊,學(xué)習(xí)開發(fā)的需要一些基礎(chǔ)課程身诺,反觀我天朝,培訓(xùn)機(jī)構(gòu)抄囚,學(xué)校霉赡,任何人都可以從零學(xué)習(xí)開發(fā))這是好是壞呢
每周還有作業(yè) 。幔托。通過概念將例子穴亏,學(xué)生們都是通過概念來做,我們學(xué)會的只是如何百度重挑。嗓化。。谬哀。
好 了刺覆, 廢話不多說。Let's GO!
不過不論名牌大學(xué)還是野雞學(xué)校史煎,老師只是引路人谦屑,剩下的還是要多多的靠自己。
雖然有中英文字幕篇梭,但有些概念還是要注意下英文字幕
1.what is in ios?
iOS中有什么氢橙,簡而言之,iOS系統(tǒng)由什么組成很洋,有什么樣的組織架構(gòu)充蓝?
何為框架 framework?
框架是一個目錄喉磁,里邊包含.h文件和資源文件構(gòu)成了framework,framework即是動態(tài)庫也是靜態(tài)庫官脓,在iOS中协怒,系統(tǒng)的framework是動態(tài)庫,自己創(chuàng)建的是靜態(tài)庫卑笨,有關(guān)靜態(tài)庫和動態(tài)庫孕暇,可以看我其它文章詳解。每個框架對應(yīng)iOS系統(tǒng)的每一層,每層建立在它下層的上面妖滔,盡量使用上層框架代替下層框架隧哮,更高層次的框架是對底層框架對象的抽象。
Cocoa Touch 觸控應(yīng)用層 也是UI層 桦沉, 如UIKit對應(yīng)這個層措左,是開發(fā)者接觸最多的一個層秕磷。Cocoa touch 是 Cocoa的觸控版本
Media 媒體層 一些影音高級自定義處理 應(yīng)用這個層比較多。
Core Serivce 核心操作系統(tǒng)層
Core OS 接近硬件采蚀,基于BSD 的Unix系統(tǒng) ,大多數(shù)API 都是用c寫的
2. Platform Components 基礎(chǔ)知識
- Tools xcode5(現(xiàn)在我的用版本是7.2)
- Language Objective-c
- Frameworks Foundation UIKit CoreData CoreMotion MapKit
3. Design Strategies 設(shè)計模式 MVC設(shè)計模式
設(shè)計模式簡單說承二,就是將工程中所用到的類合理組織與使用的策略榆鼠;
合理分配歸納到下邊這三個模塊中
M model 視圖所需要的數(shù)據(jù),e.g label上的文字
V View 構(gòu)建視圖的類亥鸠,e.g button, switch ,label...
C Controller 連接視圖與模型的類妆够,二者的媒介,e.g c將label需要的數(shù)據(jù)從m取出來负蚊,填充到label上神妹,將label顯示出來;
MVC三者如何通信盖桥?
view和model 嚴(yán)禁相互通信灾螃,必須相互獨立。
模型完全獨立于UI揩徊,不能同視圖這一塊中的對象進(jìn)行溝通
控制器到視圖的通信方式 腰鬼,控制器完全知道視圖的行為,將視圖作為控制器的一個屬性 e.g outlet
//聲明了button的輸出口塑荒,可以設(shè)置它指向xib中任何的Button熄赡,通過button可以知道所有的相關(guān)屬性和行為;
@property (nonatomic,retain) IBOutlet UIButton *button;
視圖到控制器通信方式
- 目標(biāo)動作機(jī)制 taget-action 這是一種 “盲”的方式齿税,視圖是通用的彼硫,出發(fā)視圖的行為來通知控制器;控制器本身有一個目標(biāo)方法(target)凌箕,然后將這個目標(biāo)給視圖的行為方法(action),當(dāng)視圖中觸發(fā)這個行為時拧篮,視圖會發(fā)送消息給控制器的目標(biāo)告訴控制器有人對他進(jìn)行了操作。比如按鈕的點擊事件牵舱、滑動條的滑動事件串绩。e.g 點擊按鈕 通知控制器來執(zhí)行一些事情,如頁面跳轉(zhuǎn)和網(wǎng)絡(luò)請求芜壁,刷新UI等礁凡;
*委托機(jī)制 delegate 將一些視圖不能自己處理完成的事情委托交給控制器來處理高氮,因為控制器說全局的掌控者,e.g 滾動視圖問控制器顷牌,我可以滾動嗎剪芍?should 是否可以滾動, will 將要窟蓝,did 已經(jīng) 等罪裹,這一些狀態(tài)由控制器告訴滾動視圖;視圖本身回答不了這些問題疗锐, 把這些問題交給其他對象坊谁,不知道這個對象,只知道這個對象可以回答這些問題滑臊;
*數(shù)據(jù)源機(jī)制 data source 視圖讓控制器給它將要顯示的數(shù)據(jù)口芍,有待深入研究!
視圖不該持有它的數(shù)據(jù)雇卷,數(shù)據(jù)源應(yīng)該在模型中鬓椭,與UI無關(guān)~
.模型到控制器的通信方式
- KVO 鍵值觀擦
與通知一樣,在控制器中注冊成為觀察者关划,實現(xiàn)回調(diào)方法小染,在模型發(fā)生改變的時候可以通過激活回調(diào)方法讓控制器做出一些動作。
- Notification 通知
模型數(shù)據(jù)改變了贮折,廣播信息裤翩,控制器接受,调榄,類似于電臺
現(xiàn)在的我已經(jīng)在做iOS開發(fā)2個月了踊赠,還屬于提升階段。今天的第一課每庆,白胡子老頭講了一些基本的語法筐带,比如屬性的使用,定義方法缤灵,等伦籍。
//一般來說,控制器中會注冊成為監(jiān)聽者
- (void)addObserver:(id)observer selector:(SEL)aSelector name:
//當(dāng)模型中的值發(fā)生改變時腮出,模型會發(fā)出通知
- (void)postNotification:(NSNotification *)notification;
- (void)postNotificationName:(NSString *)aName object:(id)anObject;
一些零散的知識
.h public API
.m private API 以及所有實現(xiàn)
內(nèi)存管理
屬性的修飾符帖鸦,相當(dāng)于一些代碼的開關(guān),
不一樣的修飾符胚嘲,屬性的getter和setter方法的內(nèi)容也不一樣富蓄;
strong 和 weak
我對內(nèi)存的一些見解 舉個例子??
@property (nonatomic,strong) NSObject *obj;
// like as
obj = [[NSObject alloc] init];
//obj 是一個指針, 它 指著 [[NSObject alloc] init]分配的這塊對象; 這個對象慢逾, 一般我們說obj是一個對象立倍, 這個說法并不完全準(zhǔn)確。 希望大家搞清楚對象 與指針 obj 這個指針是在內(nèi)存空間中棧內(nèi)存在的侣滩, 它的值存著堆內(nèi)對象的地址 [[NSObject alloc] init]; 也就是這個口注。
這個是 __ obj __ 是一個指針,被strong修飾君珠, 只要有被strong修飾的指針指著這個對象寝志, 這個對象的引用計數(shù)就不會為0,也就不會被釋放策添。 stong是可以修改引用計數(shù)的一個關(guān)鍵詞材部。
weak 被這個修飾詞所修飾,當(dāng)對象沒有強(qiáng)引用時唯竹,釋放內(nèi)存并會自動置為nil乐导;