iOS 13 已正式發布,網上對其用戶體驗上的新特性的描述也很多,對于開發來說,需要關注的另一方面是新系統在 API 層面做了哪些改動,從而會對我們現有的代碼產生什么影響,
在這里,我們基于 iOS 13 Release Notes 做了一些整理,主要是串列出 Apple 提供的一些新的 API 和棄用了哪些 API,一起來看看
General
? iOS 13 不再支持 UIApplicationExitsOnSuspend,需要更新應用以處理現代多任務處理,
UIKit
? 當單元格突出顯示或選中時,UITableViewCell 類不再更改 contentView 及其任何子視圖的 backgroundColor 或 opaque 屬性,如果要在 contentView 內部(包括)內容的任何子視圖上設定不透明的 backgroundColor,則單元格突出顯示或選中時的外觀可能會受到影響,解決子視圖任何問題的最簡單方法是確保將 backgroundColor 設定為 nil 或 clearColor,并且設定它們的 opaque 屬性為 false,但是,如果需要,您可以重寫 setHighlighted:animated: 和 setSelected:animated: 方法,以便在移動到突出顯示的狀態和選定狀態時手動更改子視圖上的這些屬性,
? 從iOS 8開始,將 UISearchController 與 UINavigationController 一起使用需要將頂視圖控制器的 definesPresentationContext 屬性設定為 true,如果不這樣做會導致難以檢測和除錯的細微錯誤,從 iOS & iPadOS 13 beta 開始,如果視圖控制器的 navigationItem 具有 non-nil 搜索控制元件,當視圖控制器顯示在導航控制器中時,UINavigationController 會自動將該視圖控制器的 definesPresentationContext 屬性設定為 true,如果您要定位早期版本的 iOS,請在搜索控制器變為活動狀態之前設定此屬性,
? UIRefreshControl 類不再直接修改其滾動視圖的 contentInset, 相反,它對內容插入的調整將合并到滾動視圖的 adjustContentInset 中, 唯一的例外是當滾動視圖的 contentInsetAdjustmentBehavior 設定為 UIScrollViewContentInsetAdjustmentNever 時,在這種情況下,UIRefreshControl 實體將像以前的版本一樣直接修改 contentInset,
? 如果通過覆寫 sizeThatFits 在 UITableView 中實作自調整單元格而不使用自動布局,則回傳的高度將被解釋為單元格的 contentView 所需的高度,UITableViewCell 會自動添加為單元格留出空間所需的任何其他高度 分隔器,如果以這種方式實作手動自調整大小,則在 UITableViewCell 上呼叫 sizeThatFits: 時,單元格的 contentView 寬度可以保證準確,以便在手動布局計算中使用,
? Trait環境(例如視圖和視圖控制器)現在在初始化期間使用 traits 填充 traitCollection 屬性,這些初始特征表示特征環境在添加到層次結構時將接收的最終特征的預測,因為在初始化期間填充的特征只是一個預測,它們可能與實際在層次結構中接收的特征不同,因此,在可能的情況下,您應該等待執行使用 traitCollection 的作業,直到視圖或視圖控制器的視圖移動到層次結構中 - 意味著視窗回傳非零值 - 這樣您就不必丟棄任何作業,如果實際特征不同,則使用預測的特征完成,使用 traitCollection 的最佳時間是在布局期間,例如 layoutSubviews,viewWillLayoutSubviews 或 viewDidLayoutSubviews 內部,
? 只有當特征值發生變化時,才會呼叫 traitCollectionDidChange: 方法,重要的是,由于特征集合現在初始化為目標層次結構中最終特征的預測,當初始預測特征與層次結構中的最終特征匹配時,特征環境添加到層次結構時將不會呼叫 traitCollectionDidChange:,因為 traitCollectionDidChange: 旨在作為無效回呼來通知您一個或多個特征已更改,請審核此方法的現有實作,以及 UIContentContainer 方法willTransitionToTraitCollection:withTransitionCoordinator:,用于您可能依賴它的地方觸發初始設定,懶惰地執行使用 traitCollection 的作業的最佳位置是在上面討論的 layoutSubviews 方法之一,但請記住,這些布局方法在任何時候布局都會被呼叫,所以一定要避免在不需要時重復作業,
? 您現在可以啟用除錯日志記錄,以便在您自己的類上呼叫 traitCollectionDidChange: 或willTransitionToTraitCollection:withTransitionCoordinator: 時,使用以下啟動引數打開日志記錄:-UITraitCollectionChangeLoggingEnabled YES,您可能希望在使用此啟動引數并從 Xcode 運行應用程式時暫時禁用主執行緒檢查程式,以避免為不相關的類添加額外的日志訊息,
? UITableViewCell 類的 contentView 屬性始終與前面和后面的相鄰附件進行邊對邊布局,這簡化了布局代碼,因此想要正確的默認偏移的開發人員不再需要將其內容與內容視圖邊框或布局邊距對齊,具體取決于尾部是否有附件,您現在應該始終在單元格內容視圖的布局邊距上布置代碼以獲取默認的系統插入,這些插入將根據單元格中可見的附件自動調整,以匹配系統的默認間距,
? 您現在可以從創建 block 呼叫自定義初始化程式,該創建塊通過 instantiateInitialViewController(creator:) 或 instantiateViewController(identifier:creator:) 傳遞,這使您可以使用其他背景關系和引數初始化視圖控制器,同時利用通過 Interface Builder 在故事板中定義它們,自定義控制器初始化程式必須呼叫其 super.init(coder:) 方法并傳遞它通過創建塊接收的編碼器引數,
網路
? 為了增強安全性,當服務器發送 Content-Type:application/octet-stream 時,NSURLSession 不再嗅探 MIME 型別,
? NSURLRequestReloadRevalidatingCacheData 和 NSURLRequestReloadIgnoringLocalAndRemoteCacheData API現已可用,
? 從 iOS 13 beta 4 開始,強制執行 NSMutableURLRequest 的 HTTPBodyStream 屬性的 copy 操作,如果在呼叫屬性設定器后對 body 資料進行了修改,則 HTTP 請求中發送的資料將不包含該更變,呼叫該屬性的 getter 不再回傳 NSMutableData 參考,即使使用該型別的資料呼叫 setter 也是如此,從 iOS 13 beta 5 開始,使用 iOS 12 SDK 或以前的 SDK 構建的應用程式使用舊版行為,
? CNCopyCurrentNetworkInfo API 回傳的資訊已無法反映真實情況,有關更多詳細資訊,請參閱更新的API檔案和標題,
? 包含 body 的 GET HTTP 方法的所有 NSURLSessionTask 實體現在都會拋出錯誤 NSURLErrorDataLengthExceedsMaximum,
? 洗掉了對代理自動配置(PAC)的 FTP 和檔案URL方案的支持,HTTP 和 HTTPS 是 PAC 唯一支持的 URL 方案,這會影響所有 PAC 配置,包括但不限于使用“設定”,“系統偏好設定”,“組態檔”和 NSURLSession API(如connectionProxyDictionary 和CFNetworkExecuteProxyAutoConfigurationURL)設定的配置,
? NSURLSession 和 NSURLConnection API 不再支持 SPDY,服務器應使用 HTTP 2 或 HTTP 1.1,
音頻
? 現在可以在 AVAudioEngine 上啟用語音處理模式,
? 新的 AVAudioNode 型別可用于包裝用戶定義的 block,以實時發送或接收資料,
? 基于 AVAudioEngine 的應用程式可以使用一種新方法來檢索附加到 AVAudioEngine 實體的所有節點的串列,
? AVAudioEnvironmentNode 中的新渲染模式基于輸出設備自動選擇最佳空間音頻渲染演算法,
? 一個新的 AVAudioSession 屬性允許在會話主動使用音頻輸入時播放系統聲音和觸覺,
? 新的列舉 AVAudioSessionPromptStyle 根據系統中的其他音頻活動通知應用程式應該播放哪種語音提示,
? AVAudioSessionRouteSharingPolicy 現在允許應用指定路由共享策略,以便其音頻和視頻路由到與 AirPlay 相同的位置,
? Audio Unit Extensions 現在支持所有宿主應用程式中可用的用戶預設,
? OpenAL框架已棄用,出于兼容性目的暫時保留,過渡到 AVAudioEngine 以獲得 3D 音頻功能,
? AUGraph 已被棄用,轉而支持 AVAudioEngine,
? 不推薦使用應用間音頻,使用 Audio Units 支持此功能,
? 不推薦使用基于 Carbon 的 Audio Units,在將來的版本中不再支持,
? 不再支持舊版 Core Audio HAL 音頻硬體插件,將音頻服務器插件用于支持音頻驅動程式,
音頻共享
? 音頻共享與 AirPods(第1代或更高版本)和 PowerBeats Pro 兼容,需要 iPhone 8 或更高版本,
AVFoundation
? AVFoundation 現在支持使用 HEVC 和 Alpha 通道編碼視頻,以這種方式編碼的視頻在 AVFoundation API 和網頁中的 Safari 中得到廣泛支持,格式的技術細節可以在互操作性組態檔規范中找到,
Core Image
? filterWithImageURL:options: 和 filterWithImageData:options: 不再支持 RAW 5 及更早版本, 版本 6 及更高版本仍然受支持,
? 添加了用于實體化和修改內置 Core Image 過濾器的新 API,
? 增強了 CICoreMLModel 過濾器以支持具有 MLFeatureTypeMultiArray 型別的輸入或輸出的模型,
? Metal CIKernel 實體支持具有任意結構化資料的引數,
? Metal CIKernel 實體支持回傳一組2×2像素,
? CIFormat 符號的整數值(例如 kCIFormatARGB8)已更改為跨平臺一致性的新值集合,以前的值仍然支持向后兼容; 但是,您應該避免對特定數值的依賴性,
Mail
? 現在可以在“設定”>“郵件”中啟用“忽略已阻止的發件人”,被阻止的聯系人串列與 Messages,FaceTime 和 Phone 共享,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/15110.html
標籤:iOS
