iOS6-10新特性總結
iOS 6
1、廢除了viewDidUnload,viewDidUnload
收到內存警告需要到didReceiveMemoryWarning中處理
【小技巧】:
iOS6以後的內存處理方式
2、廢除了shouldAutorotateToInterfaceOrientation。
【小技巧】:
iOS6以後的內存處理方式,用下面兩個方法代替
還需要在info.plist進行配置
3、UISwitch可以設置開關顏色和背景圖
4、UINavigationBar新增了,設置陰影圖片屬性
5、UIImage可以在設置圖片可以進行縮放
6、新增UIRefreshControl
【小技巧】:與UITableView配合實現下拉刷新
7、UICollectionView
【小技巧】:可以實現瀑布流
8、Autolayout
9、語法相關
iOS 7
1、取消了udid和mac地址訪問
提供了UUID,IDFA,IDFV,OpenUDID
【小技巧】:
UUID:
UUID是Universally Unique Identifier的縮寫,中文意思是通用唯一識別碼。它是讓分佈式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。這樣,每個人都可以建立不與其它人衝突的UUID。在此情況下,就不需考慮數據庫建立時的名稱重複問題。蘋果公司建議使用UUID爲應用生成唯一標識字符串。
開發者可以在應用第一次啓動時調用一 次,然後將該串存儲起來,替代UDID來使用。但是,如果用戶刪除該應用再次安裝時,又會生成新的字符串,所以不能保證唯一識別該設備。使用UUID,就要考慮應用被刪除後再重新安裝時的處理。一個解決的辦法是:UUID一般只生成一次,保存在iOS系統裏面,如果應用刪除了,重裝應用之後它的UUID還是一樣的,除非系統重置 。但是不能保證在以後的系統升級後還能用(如果系統保存了該信息就能用)。
IDFA:
廣告標示符是iOS 6中另外一個新的方法,提供了一個方法advertisingIdentifier,通過調用該方法會返回一個NSUUID實例,最後可以獲得一個UUID,由系統存儲着的。不過即使這是由系統存儲的,但是有幾種情況下,會重新生成廣告標示符。如果用戶完全重置系統((設置程序 -> 通用 -> 還原 -> 還原位置與隱私) ,這個廣告標示符會重新生成。另外如果用戶明確的還原廣告(設置程序-> 通用 -> 關於本機 -> 廣告 -> 還原廣告標示符) ,那麼廣告標示符也會重新生成。關於廣告標示符的還原,有一點需要注意:如果程序在後臺運行,此時用戶“還原廣告標示符”,然後再回到程序中,此時獲取廣 告標示符並不會立即獲得還原後的標示符。必須要終止程序,然後再重新啓動程序,才能獲得還原後的廣告標示符。
在同一個設備上的所有App都會取到相同的值,是蘋果專門給各廣告提供商用來追蹤用戶而設的,用戶可以在 設置|隱私|廣告追蹤 裏重置此id的值,或限制此id的使用,故此id有可能會取不到值,但好在Apple默認是允許追蹤的,而且一般用戶都不知道有這麼個設置,所以基本上用來監測推廣效果,是戳戳有餘了。
注意:由於idfa會出現取不到的情況,故絕不可以作爲業務分析的主id,來識別用戶
IDFV:
Vendor標示符是給Vendor標識用戶用的,每個設備在所屬同一個Vender的應用裏,都有相同的值。其中的Vender是指應用提供商,但準確點說,是通過BundleID的DNS反轉的前兩部分進行匹配,如果相同就是同一個Vender,例如對於com.somecompany.appone,com.somecompany.apptwo
這兩個BundleID來說,就屬於同一個Vender,共享同一個idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常適合於作爲內部用戶行爲分析的主id,來標識用戶,替代OpenUDID。
注意:如果用戶將屬於此Vender的所有App卸載,則idfv的值會被重置,即再重裝此Vender的App,idfv的值和之前不同。
OpenUDID:
每臺iOS設備的OpenUDID是通過第一個帶有OpenUDID SDK包的App生成,如果你完全刪除全部帶有OpenUDID SDK包的App(比如恢復系統等),那麼OpenUDID會重新生成,而且和之前的值會不同,相當於新設備;
優點是沒有用到MAC地址;不同設備能夠獲取各自唯一的識別碼,保證了唯一性,可以用於以往UDID的相關用途;從代碼分析OpenUDID的獲取,識別碼獲取方便並且保存謹慎。缺點是當將設備上所有使用了OpenUDID方案的應用程序刪除,且設備關機重啓,xcode徹底清除並重啓,重裝應用程序去獲取OpenUDID,此時OpenUDID變化,與之前不一樣了,所有OpenUDID應用卸載後,由UIPasteboard保存的數據即被清除,重裝故會重新獲取新的OpenUDID。
那麼當因爲用戶干預或者惡意程序,致使UIPasteboard數據清除,從而導致OpenUDID被刪除,重裝也會獲取新的OpenUDID。
2、UIPasteboard由共享變沙盒化
iOS7之前的UIPasteboard只要應用知道其名字,即可訪問其中的內容,而OpenUDID的實現方式也依賴於此,讓開發者能使用一組UUID來標記一個設備。iOS7之後,+[UIPasteboard pasteboardWithName:create:]和+[UIPasteboard pasteboardWithUniqueName]這兩個方法產生UIPasteboard僅供同組應用之間共享數據,也就是Info.plist中CFBundleIdentifier字段的前兩段標識(例如com.yourcompany.xx的com.yourcompany)相同的應用才能相互共享數據。不同組應用之間相同名字的UIPasteboard是不同的,而不是以前的同一個。所以當前版本的OpenUDID隨着iOS7的出現也將慢慢失去其效用。
3、語法增加instancetype
instancetype用來在聲明一個方法時告訴編譯器其返回類型,它表示返回調用該方法的類的對象。這比之前返回id的通常做法要好,編譯器可以對返回類型做一些檢查,如果出現錯誤,在編譯時就能提醒你,而不是在程序運行時發生崩潰。同時,在調用子類方法時,使用它還可以省去對返回值的強制類型轉換,編譯器能夠正確推斷方法的返回值類型。
4、設置UIImage的渲染模式:UIImage.renderingMode
着色(Tint Color)是iOS7界面中的一個重大改變,你可以設置一個UIImage在渲染時是否使用當前視圖的Tint Color。UIImage新增了一個只讀屬性:renderingMode,對應的還有一個新增方法:imageWithRenderingMode:,它使用UIImageRenderingMode枚舉值來設置圖片的renderingMode屬性。該枚舉中包含下列值:
renderingMode屬性的默認值是UIImageRenderingModeAutomatic,即UIImage是否使用Tint Color取決於它顯示的位置。
【小技巧】:
5、tintcolor VS barTintColor
有些類,比如說UINaviagtionBar,UISearchBar,UITabBar以及UIToolbar已經有了這麼命名的屬性。他們現在有了一個新的屬性:barTintColor。
【小技巧】:
爲了避免使用新屬性的時候犯錯誤,如果你的appp需要支持iOS6以前的系統的時候,請檢查一下。
6、UIButtonTypeRoundRect被UIButtonTypeSystem替代
7、新增檢查無線路由是否可用
在iOS7當中,你可以通過AirPlay,藍牙或是其他的虛線機制瞭解是否有一個遠程的設備可用。瞭解它的話,就可以讓你的app在恰當的時候做恰當的事,比如說,在沒有遠程設備的時候就不顯示AirPlay的icon。
8、更詳細蜂窩網絡信息
在iOS7之前,是使用Reachability來檢測設備是否連接到WWAN或是Wifi的。iOS7在這個基礎上更進了一步,它會告訴你的設備連接上的是那種蜂窩網絡。
這是CTTelephonyNetworkInfo的部分功能,它是CoreTelephony框架的一部分。iOS7還增加了currentRadioAccessTechnology屬性和CTRadioAccessTechnologyDidChangeNotification到這個類。還有一些新的字符串常量來定義可能的值,比如說是CTRadioAccessTechnologyLTE。
【小技巧】:
注意:研究一下CTTelephonyNetworkInfo.h文件來看看是否有其他無線網絡類型的的字符串常量。如果設備沒有連上的話currentRadioAccessTechnology則會返回nil。
9、通過iCloud同步用戶設備的密碼
iOS7以及Mavericks增加了iCloud Keychain來提供密碼,以及iCloud中一些敏感數據的同步。開發者可以通過keychain中的kSecAttrSynchronizable key來遍歷dictionary對象。
由於直接處理keychain比較難,封裝庫提供了一個簡單的處理keychain的方法。SSKeychain封裝庫可能是最有名的的一個,作爲一種福利,現在它支持在iCloud同步。
【小技巧】:
10、使用NSAttributedString顯示HTML
在app中使用Webviews有時會讓人非常沮喪,即使只是顯示少量的HTMLneirong,Webviews也會消耗大量的內容。現在iOS7讓這些變得簡單了,你可以從用少量代碼在HTML文件中創建一個NSAttributedString。
【小技巧】:
11、系統提供base64編碼
12、獲取截圖事件的通知(UIApplicationUserDidTakeScreenshotNotification)
13、語音播報功能(AVSpeechSynthesizer)
【小技巧】:
14、UIScreenEdgePanGestureRecognizer
UIScreenEdgePanGestureRecognizer 繼承自UIPanGestureRecognizer ,它可以讓你從屏幕邊界即可檢測手勢。
【小技巧】:
15、UIScrollViewKeyboardDismissMode
滾動的時候可以讓鍵盤消失是一種非常好的體驗,蘋果給UIScrollView添加了一個很好用的屬性keyboardDismissMode,現在僅僅只需要在Storyboard中改變一個簡單的屬性,或者增加一行代碼,你的app可以和辦到和Messages app一樣的事情了。
16、使用Core Image來檢測眨眼以及微笑
iOS給Core Image增加了兩種人臉檢測功能:CIDetectorEyeBlink以及CIDetectorSmile。這也就是說你現在可以在照片中檢測微笑以及眨眼。
【小技巧】:
17、給textView的文字上加點擊事件
【小技巧】:
18、UI變化
取消了擬物化,變成了扁平化設計
UITabbar,UIbarButtonItem,navigationBar,都以特殊形式渲染,圖片沒有內部顏色,通過tinColor渲染圖片(開發者可以通過渲染模式使用原圖顏色)。navigationBar及導航欄也作爲self.view的內容,所以self.view的原點從導航欄下面變成了,狀態欄的頂端。(可以通過self.navigationController.navigationBar.translucent以及self.edgesForExtendedLayout來決定是否以ios7或ios6樣式顯示)
19、sprite kit
可以用系統自帶框架做小遊戲
20、多任務
http://blog.csdn.NET/tskyfree/article/details/45696597
http://blog.csdn.Net/wwwang89123/article/details/46944665
21、AirDrop
蘋果將該功能集成到了UIActivityViewController,如果做了分享功能,則並不要添加特別的代碼,具體實現參考UIActivityViewController。
22、MapKit
(1)MKMapCamera,可以將一個MKMapCamera對象添加到地圖上,在指明位置,角度和方向後將呈現3D的樣子…大概可以想象成一個數字版的Google街景..
(2)MKDirections獲取Apple提供的基於方向的路徑,然後可以用來將路徑繪製在自己的應用中。這可能對一些小的地圖服務提供商產生衝擊,但是還是那句話,地圖是一個數據的世界,在擁有完備數據之前,Apple不是Google的對手。這個狀況至少會持續好幾年(也有可能是永遠)。
(3MKGeodesicPolyline創建一個隨地球曲率的線,並附加到地圖上,完成一些視覺效果。
(4)MKMapSnapshotter使用其拍攝基於地圖的照片,也許各類簽到類應用會用到。
5.改變了overlay物件的渲染方式。
23、動態uikit
新增了UIDynamicItem委託,用來爲UIView制定動態行爲,當然其他任何對象都能通過實現這組接口來定義動態行爲,只不過在UIKit中可能應用最多。所謂動態行爲,是指將現實世界的行爲或者特性引入到UI中,比如重力等。通過實現UIDynamicItem,UIKit現在支持如下行爲: * UIAttachmentBehavior 連接兩個實現了UIDynamicItem的物體(以下簡稱動態物體),一個物體移動時,另一個跟隨移動 * UICollisionBehavior指定邊界,使兩個動態物體可以進行碰撞 * UIGravityBehavior顧名思義,爲動態物體增加重力模擬 * UIPushBehavior爲動態物體施加持續的力 * UISnapBehavior爲動態物體指定一個附着點,想象一下類似掛一幅畫在圖釘上的感覺。
如果有開發遊戲的童鞋可能會覺得這些很多都是做遊戲時候的需求,一種box2d之類的2D物理引擎的既視感躍然而出。沒錯的親,動態UI,加上之後要介紹的Sprite Kit,極大的擴展了使用UIKit進行遊戲開發的可能性。另外要注意UIDynamicItem不僅適用於UIKit,任何對象都可以實現接口來獲得動態物體的一些特性,所以說用來做一些3D的事情也不是沒有可能。如果覺得Cocos2D+box2d這樣的組合使用起來不方便的話,現在動態UIKit+SpriteKit給出了新的選擇。
24、Inter-App Audio應用間的音頻
AudioUnit框架中加入了在同一臺設備不同應用之間發送MIDI指令和傳送音頻的能力。比如在一個應用中使用AudioUnit錄音,然後在另一個應用中打開以處理等。在音源應用中聲明一個AURemoteIO實例來標爲Inter-App可用,在目標應用中使用新的發現接口來發現並獲取音頻。想法很好,也算是在應用內共享邁出了一步,不過我對現在使用AudioUnit這樣的低層級框架的應用數量表示不樂觀。也許今後會有一些爲更高層級設計的共享API提供給開發者使用。畢竟要從AudioUnit開始處理音頻對於大多數開發者來說並不是一件很容易的事情。
25、點對點連接 Peer-to-Peer Connectivity
可以看成是AirDrop不能直接使用的補償,代價是需要自己實現。MultipeerConnectivity框架可以用來發現和連接附近的設備,並傳輸數據,而這一切並不需要有網絡連接。可以看到Apple逐漸在文件共享方面一步步放開限制,但是當然所有這些都還是被限制在sandbox裏的。
26、Store Kit Framework
Store Kit在內購方面採用了新的訂單系統,這將可以實現對訂單的本機驗證。這是一次對應內購破解和有可能驗證失敗導致內購失敗的更新,蘋果希望藉此減少內購的實現流程,減少出錯,同時遏制內購破解氾濫。前者可能沒有問題,但是後者的話,因爲objc的動態特性,決定了只要有越獄存在,內購破解也是早晚的事情。不過這一點確實方便了沒有能力架設驗證服務器的小開發者,這方面來說還是很好的。
27、iBeacon
一種全新的基於藍牙的傳輸協議,可以實現非常精確的定位
http://blog.csdn.net/boxertan/article/details/39783963
iOS 8
1、UIAlertController
UIAlertController整合了actionsheet和alertview
【小技巧】:
2、SizeClasses
可以根據不同尺寸,橫屏豎屏在StoryBoard上或者Xib上對app進行適配
3、Health Kit
健康方面
4、Home Kit
智能家居方面
5、SceneKit
遊戲方面
6、Handoff
如果你的程序有mac版本,那麼它可以和ios版本進行自由的交互
( 例如系統的電話,短信,facetime功能)
7、CLFloor室內定位
CLLocation的floor可以告訴你當前的樓層
8、TouchID
指紋識別方面
9、PhotoKit
一個新的相冊框架,替代了原來的AL
10、UIPopoverPresentationController
其相當於ipad中的UIPopoverController,在某個空間周邊顯示一個氣泡菜單
【小技巧】:
11、Cloud Kit
其類似於BaaS,與之不同的是,Cloud Kit傾向於對數據的集成。你可以不更改應用現有的數據模型和結構,而只是使用 Cloud Kit 來從雲端獲取數據或者向雲端存儲數據。但是其最大限制在於只能用於蘋果端。
12、全新的通知機制
http://blog.csdn.net/songhongri/article/details/39482067
13、定位權限的變化
【小技巧】:
14、各種小插件
Today Widget Extension
http://blog.csdn.net/kuloveyouwei/article/details/44019815
第三方輸入法 Extension
Document Picker Extension
Photo Editing Extension
Shared Extension
Action Extension
Watch Extension
15、Metal Kit
一套圖形接口 與OpenGL 和Direct3D類似主要製作3D相關
16、Apple Pay
蘋果支付相關sdk
17、tableviewcell自動適應高度
如果cell用autolayout佈局,只需要兩行代碼就可以實現自動計算高度
18、WebKit
WKWebView可以替代UIWebView
19、Swift語言
iOS 9
1、https網絡
默認https,如果不支持https,需要到info.plist做配置
2、後臺定位
【小技巧】:
3、Bitcode
4、inHouse需要進入系統設置權限(彈窗同意)才能安裝
5、URL scheme
在iOS9中,如果使用URL scheme必須在"info.plist"中將你要在外部調用的URL scheme列爲白名單,否則無法跳回來。
在info.plist中設置 LSApplicationQueriesSchemes類型爲數組,下面添加所有你用到的scheme
6、蘋方字體
7、iPad適配Slide Over和 Split View
可以進行多窗口開發
8、tableview局部reload
9、Watch Connectivity
由於watchOS 2的架構變化,需要這麼一個東西來對iPhone和Watch進行雙向通信
10、Spotlight
可以讓自己的app在系統搜索欄搜到內容
11、App Thinning
可以針對設備對app優化,讓安裝包變小
12、Safari Services Framework(SFSafariViewController)
但你的app需要展示一個WebView又不需要太多定製的時候,用它來替換掉你現在在用的UIWebView或者WKWebView。他可以讓Safari以一個Controller的形式加載你的網頁,和系統的Safari完全共享Cookie和Autofill等特性,最重要的,Safari的JavaScript引擎
13、3D touch
http://www.jianshu.com/p/b552bedbc3ef
14、UI Test
可以用Xcode進行項目的自動化測試了
15、GameplayKit,ReplayKit,Model I/O
對遊戲的支持
16、語法相關
(1)泛型 如:
(2)可空標記
如:
(3)kindof
可以讓返回值用kindof
17、UIStackView
類似於安卓的線性佈局
18、preferredStatusBarStyle
控制器管理狀態欄
iOS 10
1、User Notifications
https://onevcat.com/2016/08/notification/
2、iMessage Apps 表情包App
3、新的插件
iMessage Extension
Notification Content Extension
Notification Service Extension
Audio Unit Extension
Broadcast UI Extension
Broadcast Upload Extension
Call Directory Extension
Content Blocker Extension
Intents Extension
Intents UI Extension
Shared Links Extension
Sticker Pack Extension
4、SiriKit(使用siri服務)
在 iOS 10 中,我們只能用 SiriKit來做六類事情,分別是:
- 語音和視頻通話
- 發送消息
- 發送或接收付款
- 搜索照片
- 約車
- 管理健身
5、SpeechFramework語音識別
https://my.oschina.net/u/2340880/blog/751442
6、Proactive Suggestions
siri建議
7、CallKit
8、隱私權限
所有的功能都需要加隱私權限說明(彈窗),否則會閃退
9、tabbar未選中顏色
10、跟着系統字體變化
11、UIViewPropertyAnimator屬性動畫器
那麼在iOS 10之前,我們使用UIView做動畫效果或者自定義一些layer的動畫,如果開始了,一般無法進行停止操作更不能暫停操作,而且一些非常複雜的動畫處理也比較麻煩,但是在iOS10,蘋果退出了一個全新的API UIViewPropertyAnimator,可供我們處理動畫操作UIViewPropertyAnimator 是 iOS 10 中新增的一個執行 View動畫的類,具有以下特點:
可中斷性
可擦除
可反轉性
豐富的動畫時間控制功能
12、UIColor新方法
iOS 10 蘋果官方建議我們使用sRGB,因爲它性能更好,色彩更豐富。
13、ipv6適配
14、UITextContentType
在iOS 10 UITextField添加了textContentType枚舉,指示文本輸入區域所期望的語義意義。
使用此屬性可以給鍵盤和系統信息,關於用戶輸入的內容的預期的語義意義。例如,您可以指定一個文本字段,用戶填寫收到一封電子郵件確認uitextcontenttypeemailaddress。當您提供有關您期望用戶在文本輸入區域中輸入的內容的信息時,系統可以在某些情況下自動選擇適當的鍵盤,並提高鍵盤修正和主動與其他文本輸入機會的整合。
15、UIScrollView新增refreshControl
16、判斷系統版本
//值爲 1 [[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]
//值爲10.000000[[UIDevice currentDevice] systemVersion].floatValue,
//值爲10.0 [[UIDevice currentDevice] systemVersion]
17、Xcode8不能用插件
http://vongloo.me/2016/09/10/Make-Your-Xcode8-Great-Again/?utm_source=tuicool&utm_medium=referral
18、[[UIApplication sharedApplication] openURL被廢棄
【小技巧】:
用 [[UIApplication sharedApplication] openURL:nil options:nil completionHandler:nil]代替。
19、字體變化
ios10字體變大,有可能字體顯示不全,所以lable大小不要寫死
20、UICollectionView性能優化
iOS 10 對UICollectionView進一步的優化。
- UICollectionView cell pre-fetching預加載機制
- UICollectionView and UITableView prefetchDataSource新增的API
- 針對self-sizing cells的改進
- Interactive reordering
21、https適配
iOS 9中默認非HTTS的網絡是被禁止的,當然我們也可以把NSAllowsArbitraryLoads設置爲YES禁用ATS。不過iOS 10從2017年1月1日起蘋果不允許我們通過這個方法跳過ATS,也就是說強制我們用HTTPS,如果不這樣的話提交App可能會被拒絕。但是我們可以通過NSExceptionDomains來針對特定的域名開放HTTP可以容易通過審覈。