KVO和KVC:
KVC:
- KVC是鍵值編碼,是一種間接訪問對象實例變量的機制,只用該機制不需要調(diào)用set或get方法??以及->來訪問成員變量,它通過setValue: forKey 和valueForkey方法來訪問。(可以通過一個字符串的key(屬性名)修改對象的屬性值)
優(yōu)點:
a、主要的好處就是減少代碼量
b、沒有property的變量也能通過KVC來設(shè)置缺點:
如果key寫錯萝挤,編寫時不會報錯,運行時會報錯注意:KVC不是設(shè)計模式
KVO:
- KVO是鍵值監(jiān)聽根欧,是一種能使得對象獲取到其他對象屬性變化的通知機制(可以監(jiān)聽一個對象屬性值的改變)
優(yōu)點:
a怜珍、能夠提供一種簡單的方法實現(xiàn)兩個對象間的同步
b、能夠?qū)Ψ俏覀儎?chuàng)建的對象凤粗,即內(nèi)部對象的狀態(tài)改變做出響應(yīng)酥泛,而不要改變內(nèi)部對象的實現(xiàn)
c、能夠提供觀察的屬性的最新值以及先前值
d、用key paths來觀察屬性柔袁,因此也可以觀察嵌套對象
e呆躲、完成了對觀察對象的抽象,因為不需要二維的代碼來允許觀察值能夠被觀察缺點:
a捶索、觀察的屬性必須使用strings來定義插掂,隱藏編譯器不會出現(xiàn)警告和檢查
b、對屬性重構(gòu)將導(dǎo)致觀察代碼不再可用
c腥例、復(fù)雜的“if”語句要求對象正在觀察多個值辅甥,這是因為所有的觀察都通過一個方法來指向
d、當釋放觀察者時不需要移除觀察者
KVO和KVC的聯(lián)系:
- 實現(xiàn)KVO鍵值觀察模式燎竖,被觀察的對象必須使用KVC鍵值編碼來修改它的實例變量璃弄,這樣才是被觀察者觀察到。因此构回,KVC和KVO的基礎(chǔ)或者說KVO實現(xiàn)是建立在KVC的基礎(chǔ)之上的
簡述常見的設(shè)計模式
- 單例設(shè)計谢揪、代理設(shè)計、KVO 觀察者(通知)捐凭、工廠方法、模板方法 MVC凳鬓、命令模式茁肠、適配模式
MVC設(shè)計模式
MVC是一種架構(gòu)模式,M表示數(shù)據(jù)模型Model缩举,V表示視圖View垦梆,C表示控制器Controller。
1仅孩、Model負責(zé)存儲托猩、定義、操作數(shù)據(jù)辽慕。
2京腥、View用來展示數(shù)據(jù)給用戶,和用戶進行操作交互溅蛉。
3公浪、Controller是Model于View的協(xié)調(diào)者,Controller把Model中的數(shù)據(jù)拿過來給View使用船侧。Controller可以直接與Model和View進行通信欠气,而View不能和Controller直接通信。View與Controller通信需要利用代理協(xié)議的方法镜撩,當有數(shù)據(jù)的更新時预柒,Model也要與Controller進行通信,這個時候使用notificationhe KVO,這個方式就像一個廣播宜鸯,Model發(fā)射信號憔古,Controller設(shè)置監(jiān)聽器接收信號,當有數(shù)據(jù)要更新時顾翼,就發(fā)信號給Controller投放。Model和View不能直接進行通信,因為這樣就違背了MVC的設(shè)計思想适贸。
工廠
工廠方法模式:定義創(chuàng)建對象的接口灸芳,讓子類決定實例化哪一個類。工廠方法使得一個類的實例化延遲到其子類拜姿。
使用場景:
1烙样、編譯時無法準確預(yù)期要創(chuàng)建的對象的類;
2蕊肥、類想讓子類決定在運行時創(chuàng)建什么谒获;
3、類有若干輔助類為其子類壁却,而你想將返回哪個子類這一信息局部批狱;
代理
代理是一種概念,是用協(xié)議來實現(xiàn)的展东。代理是兩個對象之間通訊的一種方式赔硫,代理主要做反向傳值,實現(xiàn)系統(tǒng)的一些回調(diào)方法盐肃,一般用來1:1的兩個對象通訊上爪膊。
類方法和實例方法的區(qū)別
1、類方法是屬于整個類砸王,而不屬于某個對象推盛。
2、類方法只能訪問類成員變量谦铃,不能訪問實例變量耘成,而實例方法可以訪問類成員變量和實例變量。
3荷辕、類方法的調(diào)用可以通過類名.類方法和對象.類方法凿跳,而實例方法只能通過對象.實例方法訪問。
4疮方、類方法只能訪問類方法控嗜,而實例方法可以訪問類方法和實例方法。
5骡显、類方法不能被覆蓋疆栏,實例方法可以被覆蓋曾掂。
繼承和擴展、類別
-繼承
繼承:一個類(子類)繼承于另一個類(父類)壁顶,那么子類不僅擁有父類所有的屬性和方法珠洗,而且可以創(chuàng)建屬于自己的屬性和方法。ios中不支持多繼承若专,只能單繼承,一個類只能有一個父類
-擴展
1调衰、擴展與類別類似,其實就是相當于匿名的類別
2米酬、擴展可以用于臨時對某個類的接口進行擴展赃额,在類的實現(xiàn)文件中定義跳芳。
3竹勉、可以在類擴展中聲明屬性和實例變量饶米。
-類別
1檬输、為已有的類添加新的方法
2、可以在類別中添加新屬性匈棘,但是不能為類別添加新的實例變量丧慈。
作用:
1、將類的實現(xiàn)分散到多個不同文件或多個不同框架中主卫。
2逃默、創(chuàng)建對私有方法的前向引用
3、向?qū)ο筇砑臃钦絽f(xié)議簇搅。
缺陷:
1完域、無法向類中添加實例變量,類別中沒有空間容納實例變量
2瘩将、存在名稱沖突問題吟税,即類別中實例方法與現(xiàn)有方法重名凹耙,類別具有更高優(yōu)先級肠仪,造成方法覆蓋。
優(yōu)勢:
1意述、可以將類的實現(xiàn)代碼放到不同的文件或框架中,需要的時候引用特定的文件即可吮蛹。
2、可以創(chuàng)建對私有方法的前行引用匹涮。
iOS7天试、iOS8、iOS9的區(qū)別
iOS7:
iOS 7是iOS面世以來在用戶界面上做出改變最大的一個操作系統(tǒng)然低。iOS 7拋棄了以往的擬物化設(shè)計带兜,而采用了扁平化設(shè)計喧兄。蘋果優(yōu)化了 iOS 的工作方式浑彰,并以此為基礎(chǔ)重新設(shè)計了 iOS 的外觀。之所以這樣做诉濒,是因為能夠服務(wù)于體驗的設(shè)計才是出色的設(shè)計及志。
1划纽、控制中心
控制中心為用戶建立快速通路,便于用戶使用那些隨時急需的控制選項和app
2幻捏、增強的通知中心
通知中心可以讓用戶隨時掌握新郵件、未接來電、待辦事項和更多信息沛善。iOS7的通知中心和以往的通知中心不同,它變成了三欄--今天塞祈、全部金刁、未讀通知
3、更加只能的多任務(wù)處理
多任務(wù)處理始終是在App之間切換的捷徑议薪,iOS7會了解用戶喜歡何時使用App尤蛮,并在用戶啟動App之前更新用戶的內(nèi)容。
4斯议、更強大的相機
iOS7的相機功能將你所有的拍攝模式置于顯要位置抵屿,包括照片、視頻捅位、全景模式和新增的Square模式。
5搂抒、智能相冊
iOS7有更快速艇搀、更輕松、更愉悅的方式求晶,讓用戶能根據(jù)時間和地點智能的分組管理用戶的照片和視頻焰雕。
6、AirDrop文件共享
AirDrop能讓用戶通過共享按鈕芳杏,快速矩屁、輕松的共享照片辟宗、視頻、通訊錄吝秕,以及任何App中的一切泊脐。AirDrop會使用無線網(wǎng)絡(luò)和藍牙搞定其余的事情,不需要設(shè)置烁峭,且傳輸經(jīng)過加密容客,可嚴格保障共享內(nèi)容的安全.
7、改進的Safari
iOS7中的Safari令瀏覽更強大约郁、更出色缩挑、更美觀。按鈕和工具欄會隱藏起來鬓梅,因此供置,用戶會在屏幕上看到比以往更多的內(nèi)容。綜合智能搜索欄绽快、全新標簽視圖芥丧、共享的鏈接和閱讀列表讓你的Safari更加強大。
8谎僻、iCloud鑰匙串
iCloud可以為用戶記住用戶的帳戶名稱娄柳、密碼和信用卡號碼。無論用戶何時需要登入網(wǎng)站或在線購買艘绍,Safari都能自動輸入這些信息赤拒。而且 256-bit AES 加密令它極為安全。
9诱鞠、正式版Siri
iOS7中的Siri擁有新外觀挎挖、新聲音和新功能。它的界面經(jīng)過重新設(shè)計航夺,以淡入視圖浮現(xiàn)于任意屏幕畫面的最上層蕉朵。Siri回答問題的速度更快,還能查詢更多信息源阳掐,如維基百科始衅。它可以承擔(dān)更多任務(wù),如回電話缭保、播放語音郵件汛闸、調(diào)節(jié)屏幕亮度,以及更多艺骂。
10诸老、App Store新功能
附近的熱門App是iOS7推出的App Store新功能,能夠顯示與用戶當前位置相關(guān)的一系列熱門App钳恕。iOS7還能讓用戶的App自動保持更新别伏,再不需要用戶費心蹄衷。
iOS8:
1.size classes的推出
size classes的產(chǎn)生對于屏幕的適配提供了便利,沒必要獲取屏幕的尺寸來進行操作了厘肮,將長寬尺寸按照設(shè)備類型和方向歸類為 regular 和 compact兩類愧口,通過為不同的設(shè)備定義尺寸分類,用來定義同類型的操作特性轴脐,美中不足的是只能相對于父控件來適配调卑。
2.Cloud Kit
其作用就是將數(shù)據(jù)原封不動的使用 Cloud Kit 向云端獲取數(shù)據(jù)和存儲數(shù)據(jù).
3.新增 Photos.framework 框架
這個框架的主要作用就是和蘋果自帶的photo應(yīng)用交互,它對于 Assets Library(照片和視頻的選却笤邸)的主要優(yōu)勢在于能夠和iCloud照片交互恬涧。還能監(jiān)視其他應(yīng)用對于照片的改變.
第三方軟件也可以通過 touchID驗證(支付寶)。
4.HeatKit框架的推出
我們綁定健康應(yīng)用后就可以查看很多的健康信息包括步數(shù)碴巾、跑步距離等等.
5.Spotlight
當我們要查找一個聯(lián)系人或者軟件溯捆,Spotlight就可以快鍵方便的查出,還能幫你在互聯(lián)網(wǎng)和維基百科提供匹配的信息.
iOS9:
1厦瓢、Xcode7 免證書真機調(diào)試提揍。
2、UIAlertView過期煮仇,用UIAlertController可以完全替代劳跃,而且效果很好的.
3、URL scheme
當我們要用到分享或者調(diào)到其他平臺授權(quán)的功能時浙垫,在iOS8中可以比較隨意刨仑,但是在iOS9中我們需要將要外部調(diào)用的URL scheme列為白名單,才可以完成跳轉(zhuǎn)
4夹姥、iOS8 自動開啟多點觸控杉武,但是iOS9默認不開啟
在viewDidLoad里面添加:self.view.multipleTouchEnabled = YES
5、iOS9增加了語言后面的地區(qū)代碼辙售, 中國 zh-Hanz–>zh-hanz-CN
6轻抱、Xcode7打包不了老項目,報錯bitcode旦部,解決方法:build setting中關(guān)閉bitcode祈搜,設(shè)置 enable bitcode 為NO
7、IOS9中部分字體可能間距會變大士八,label中顯示不全的問題容燕。
frame和bounds的區(qū)別:
- frame指的是:該view在父view坐標系統(tǒng)中的位置和大小(參照點是父視圖點坐標系統(tǒng))
- bounds指的是:該view在本身坐標系統(tǒng)中的位置和大胁芰濉(參照點事本身的坐標系統(tǒng))
frame:
frame: 參考父view的坐標系來設(shè)置自己左上角的位置。
以父控件
內(nèi)容
的左上角為坐標原點, 計算出的控件自己
矩形框
的位置和尺寸捧杉。
bounds:
bounds:設(shè)置bounds可以修改自己坐標系的原點位置陕见,進而影響到其“子view”的顯示位置秘血。bounds的X、 Y的值是可以改變的评甜。改變的其實是控件的內(nèi)容的位置灰粮,所以控件本身的位置是不會變的,但是該控件的子控件位置就會發(fā)生改變忍坷。
以控件自己
內(nèi)容
的左上角為坐標原點, 計算出的控件自己
矩形框
的位置和尺寸粘舟。