備注: 所有筆記均與老師ppt相對(duì)應(yīng)。?
第一篇: 關(guān)于 view controller
ppt1:
model:持久化保持狀態(tài)的部分
view: 直接和用戶打交道
controller: 傳遞與儲(chǔ)存數(shù)據(jù) 承上啟下
view用delegate傳信息給controller(data owner, file source)
MVC具體會(huì)在設(shè)計(jì)結(jié)構(gòu)的課程里講述
之間起到 單項(xiàng)作用 若耦合
ppt2: 各種框架的選擇
cocoa本來是用來給小孩子的玩玩
MVC的弊端: GUI中程序瑣碎 10個(gè)object-> 10 presentation
-> MVP? ( model - view - presenter)? UILogic 中加入自動(dòng)化UIStates? 取出一部分和界面相關(guān)的data binding
-> M-V-VM (model - view - view model) 雙向的data binding
問題: 數(shù)據(jù)間的關(guān)系 難以表達(dá) 尤其在三維動(dòng)畫中體現(xiàn)完全
->FRP(functional reactive programming) 用數(shù)據(jù)流漓穿, 中間搭建好關(guān)系(map)昌妹,就可以自動(dòng)的反應(yīng)了 (微軟)
MVC是一切的基礎(chǔ)
ppt3:
UIViewController 實(shí)質(zhì) 就是一個(gè) API(Application Programming Interface應(yīng)用程序編程接口)
viewcontroller 可以 管理view + 傳遞數(shù)據(jù)(多個(gè)界面的controller之間也需要傳遞)+適應(yīng)設(shè)備(旋轉(zhuǎn)補(bǔ)償etc)+颜说。橱夭。嗤形。躲撰。
viewcontroller的結(jié)構(gòu)是一個(gè)樹
ppt4: 創(chuàng)建rootViewController 的過程
info.plist
本身會(huì)自動(dòng)幫忙load界面 loadMainStoryboard…
若這個(gè)函數(shù)被刪去 則可以通過uiapplicationdelegatedidFinishLaunch來 也就是調(diào)用手寫的代碼
若我們手工不寫的話 則會(huì)黑屏针贬, 因?yàn)闆]有uiwindow了
window是UIwindow的一個(gè)實(shí)例
前面是 view 后面的 就是window
UIMainStoyuboardFile NSMainNibFile 分別有兩個(gè)主界面
之前就是用代碼完全創(chuàng)建view controller
window
UIWindow(一切可視化界面的起點(diǎn)) - UIview
[實(shí)驗(yàn)嘗試]得
若mainstoryboard后面的value沒了或直接刪去整個(gè)storyboard 界面也會(huì)由藍(lán)色變?yōu)楹谏?/p>
若mainstoryboard后面的value放了錯(cuò)誤的東西? 界面也會(huì)由藍(lán)色變?yōu)榘咨?然后會(huì)出現(xiàn)如圖所示的錯(cuò)誤
把mainstoryboard刪掉 手動(dòng)創(chuàng)建它 但是不給他viewcontroller
這個(gè)代碼會(huì)在練習(xí)說明里面提供
viewcontroller怎么拿到他的東西呢?
nibname的可能性
默認(rèn)的話 viewcontroller 從 storyboard 來拢蛋, 那么nib已經(jīng)嵌入其中
若自己用程序?qū)?則按照
若什么都沒有 就會(huì)調(diào)用existingNibNameMatchingClassname
練習(xí):
把對(duì)話框中的 1桦他,2,3谆棱,4快压,5,6 都去試驗(yàn)一下
用斷點(diǎn)或者NSLog來理解viewcontroller的 lifecycle
展示的每個(gè)viewcontroller都需要上手練一遍
注意: 以u(píng)icontroller大頭的不會(huì)自動(dòng)尋找nib
viewdisappear可以放部分的信息 但不要放太多
把UIviewcontroller的文檔要看一遍
ppt5:
viewcontroller會(huì)盡量推遲view的加載
通常當(dāng)自己變成主窗口的時(shí)候才會(huì)開始閱讀
自己寫的代碼 就會(huì) 調(diào)用 loadcontroller
自定義的loadview 是不會(huì)調(diào)用supercontroller的
如果有UI view controller 大頭的 注意系統(tǒng)根本不會(huì)去加載后面的內(nèi)容咯
ppt6:
life circle
will-did
viewWillDisappear:? 清理工作
ppt6: view presentation每個(gè)人都要去寫一遍
用-presentviewcontroller:
用來傳遞數(shù)據(jù)
uimodelpresentationFormSheet: 郵件
uimodelpresentationcurrentcontext: 分屏工作
建議還是用來看文檔比較好
showviewcontroller: ios8 之后就有了 建議也去模擬一下子
如何回傳數(shù)據(jù): 后一步-》前一步:
前一步 delegate -》 后一步
后一步傳消息 -> delegate -> 前一步dismiss
第二篇: 關(guān)于storyboard
打開viewcontroller的sourcecode 我們會(huì)發(fā)現(xiàn)它也是一個(gè)xib也就是nib文件 但是它和普通的view controller又不一樣 它放的是一個(gè)場(chǎng)景(scene)
注意縮小的情況下無法編輯這個(gè)場(chǎng)景垃瞧, 需要雙擊進(jìn)入才能夠編輯
一個(gè)storyboard是一個(gè)故事
如果沒有把第一個(gè)view刪去的話蔫劣,nib會(huì)默認(rèn)為先調(diào)用這最初的view 而不是viewcontroller的名字
storyboard上3個(gè)按鈕的含義 從左到右依次為:
view的名字 + 上面第一個(gè)響應(yīng)的事件 + 。个从。脉幢。
除了用按鈕去觸發(fā)之外 還可以選擇用直接在導(dǎo)航欄拖動(dòng)
要把UIstoryboard 的 reference也看一看
第三篇: 關(guān)于life cycle
ppt5:
在做appdelegate 中 圖示的程序是非常值得學(xué)習(xí)的
NSStringFromClass([AppDelegate class])
與直接放上 AppDelegate 其實(shí)是等價(jià)的歪沃,
可是圖中的方法更好,因?yàn)樗梢员WC你后續(xù)的appname改變的話嫌松,在這里也會(huì)自動(dòng)跟著改變的沪曙。
ppt6:
關(guān)于port mac, event queue萎羔, main run loop (不斷的循環(huán)液走,來偵探有的觸摸等 用戶行為) 都是mac系統(tǒng)已經(jīng)幫我們準(zhǔn)備好的 我們要做的就是 通過viewcontroller來規(guī)定遇到了這些行為我們要去做些啥子
解釋一個(gè)概念 runloop mode: 就是指 一組數(shù)據(jù)源
runloop就是為了偵探信息來發(fā)給我們的主線程用的。
ppt7:
注意在 willFinishLaunchingWithOptions (盡量在這里去做初始化)里面要放應(yīng)用級(jí)的初始化工作贾陷,但是不要做很多太耗時(shí)的工作
如果需要做的話缘眶,用dispactch cue 開一個(gè)ebool的線程來完成會(huì)更好一些
/*
當(dāng)UI界面的臨時(shí)狀態(tài)還沒有恢復(fù),并且我們希望做一些應(yīng)用級(jí)的初始化工作時(shí),可以放到以下哪個(gè)方法中:
?
A. -(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
? B.- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsC.- (void)applicationWillEnterForeground:(UIApplication
D.- (void)applicationWillTerminate:(UIApplication *)application
應(yīng)該選擇A
*/
界面的狀態(tài)已經(jīng)恢復(fù)過了,但是UI 還沒有放到屏幕上昵宇,進(jìn)入了inactive狀態(tài)磅崭。
inactive也就是說代碼在執(zhí)行,但是界面上看不見瓦哎,用戶的動(dòng)作不會(huì)被響應(yīng)
-> didFinishLaunchingWithOptions 這里可以去看看 有哪些options(分別對(duì)應(yīng)了各種稀奇古怪的打開方式)
app programming guide for iOS
preserving your app’s visual appearance across launches 有詳細(xì)的解釋
要想真的很好的完成ios開發(fā) 還需要去閱讀很多砸喻。
-》 applicationdidbecomeActive
這樣用戶就進(jìn)來啦!蒋譬!
此刻若打進(jìn)來電話割岛,或著按了home按鈕
-> applicationWilllResignActive
我們?nèi)プ鲆恍┍Wo(hù)線程
-> applicationDidEnterBackground
這個(gè)只會(huì)有5s(系統(tǒng)說),實(shí)際大概為100s犯助。如果需要更長(zhǎng)的可以申請(qǐng)更長(zhǎng)的 (startgroundTimeRemaining 大概10min)
ps: 后臺(tái)運(yùn)行程序和這里的不一樣癣漆,比如高德地圖,音樂軟件啥子的剂买,這個(gè)自己去看吧(見app programming guide for ios)惠爽。
因?yàn)閮?nèi)存不夠啥子的,而且還沒有被suspend(比如5s后就隨時(shí)有可能被suspend)
-> applicationWillTerminate
所以千萬不要在這里做一些關(guān)鍵的動(dòng)作瞬哼。
若回復(fù)活
applicationWillEnterForeground
會(huì)在調(diào)用app delegate后發(fā)出同名的ui notification 這樣系統(tǒng)中除了app delegate的部分也可以去訪問這個(gè)事件婚肆。
ppt8:
移動(dòng)應(yīng)用的特點(diǎn): 啟動(dòng) - 使用 -中斷 -恢復(fù)
用戶正在你的程序 滾動(dòng)下來 找圖片,然后一個(gè)電話打進(jìn)來坐慰。 UI狀態(tài)的保持
用調(diào)試的一個(gè)常見方法: NSLog(@“will finish launching”);
21’ 開始講解 在邊欄上可以設(shè)置斷點(diǎn)
斷點(diǎn)中如果需要跟蹤某個(gè)變量可以利用 filter, add, 或者
右下角窗口的go self.window.rootViewController
+ add symbolic breakpoint
swift breakpoint
except breakpoint (特殊異常錯(cuò)誤)
test failure breakpoint(只在沒法運(yùn)行的時(shí)候的時(shí)候)
debugger? command
log message也是可以的
匯編語言中需要注意的其實(shí)只是 callq 意思是調(diào)用了q這個(gè)函數(shù)
idapro 對(duì)于匯編語言弄的熟悉的人 可以用较性。
接個(gè)設(shè)備去調(diào)試會(huì)好很多喲~
練習(xí):
xcode的每個(gè)調(diào)試功能 選擇: 用符號(hào)斷點(diǎn),來看一下uikey的內(nèi)部具體內(nèi)容
nslog
觀看: iOS調(diào)試實(shí)戰(zhàn)
http://e.gensee.com/v_72a754_6
第六篇: 關(guān)于navigation bar
1, 要有統(tǒng)一的設(shè)計(jì)風(fēng)格结胀,要讓顧客在固定的地方做固定的事情
2. navigation bar(又叫面包屑)最常用的界面跳轉(zhuǎn)控制赞咙, 最經(jīng)典的可以在我們的setting里面找到。
3. 這個(gè)只會(huì)有上一步 - 下一步糟港,
而不像網(wǎng)頁(yè)那樣所有的網(wǎng)站都會(huì)有
因?yàn)橛衭inavigation controller
navigationitem 形式: 左(上一個(gè))+中(title)+右(下一個(gè))
第二課:
-ppt5: navigationbar 結(jié)構(gòu)
1. 需要理解的是navigationbar 管理的是 navigationitem
2. push/pop的都是item
ppt6:
所有能顯示的item都是繼承自u(píng)ibaritem
enabled 若為false 就是灰掉不能點(diǎn)的那種
title<>image 文字題目<>圖片題目
tag: 所有的界面都有的這種tag 有多個(gè)的那種(尤其是同類型的)可能需要區(qū)分 于是特別需要tag
imageinsets: 定位的時(shí)候會(huì)用到的
uibaritem 首先是一個(gè)button(就是有action攀操, target的特點(diǎn))
-initwithbarButtonSystemItem: target: action? -system
-initWithCustomView (大概的action就沒了)? -自定義的
Custom: 意思是自己添加
ppt7:
除了navigation bar 還有tool bar
ps:? 實(shí)踐
插入圖片的話 可以不放在catalog里面而是放在preview里面,除了imagename的方法還有mainbundle里面找到圖片的ui號(hào)碼着逐,以免把所有的東西都存在系統(tǒng)的圖片緩存里面崔赌。
放在Project里的圖片可以用imageByName的方法訪問,也可以用mainBundle找到圖片的URL來訪問.
補(bǔ)充: 鍵盤遮擋問題