电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

iOS 8 新特性介紹

瀏覽:2日期:2022-09-17 14:45:22

隨便去問任何人,他們都會告訴你WWDC2014是近年來最為激動的回憶。 整個大會沒有發布任何新硬件,它是一次史無前例的軟件開發者盛宴!

僅是iOS 8和OS X Yosemite的發布就能讓2014成為蘋果平臺劃時代的一年,加上Extension,Continuity,SpriteKit 改進,iOS SceneKit,Metal,HealthKit,Local Authentication和全新的照片框架。更不用說,Xcode和Interface Builder的明顯改觀,重新設計的iTunes Connect,TestFlight,崩潰報告和CloudKit。當然還有oh yeah-Swift。

更棒的是?蘋果放松了她的保密協定,也就是說我們可以現在就公開討論這些嶄新的玩具!

這周,我們將撥開iOS 8的云霧,探討一些所有人都應該知道新API。

從現在開始NSHipster講主要使用Swift寫樣歷代嗎。夏天結束之前,我們希望能將全部的現存代碼轉換為Swift,并且提供可以切換語言的選項。

 NSProcessInfo -isOperatingSystemAtLeastVersion

忘記[[UIDevice currentDevice] systemVersion]和NSFoundationVersionNumber吧, 現在可以用NSProcessInfo -isOperatingSystemAtLeastVersion來確定系統版本。

import Foundationlet yosemite = NSOperatingSystemVersion(majorVersion: 10, minorVersion: 10, patchVersion: 0)NSProcessInfo().isOperatingSystemAtLeastVersion(yosemite) // false

值得注意的是,在做兼容性測試的時候還是應該使用SomeClass.class或respondsToSelector:。 Swift和C中的編譯器宏可以用來根據不同生成配置和目標來選擇代碼。

 新的NSFormatter子類

Foundation中嚴重缺失的一項功能就是不能處理重量和長度單位轉換。在iOS 8和OS X Yosemite中,引進了三個新類NSEnergyFormatter,NSMassFormatter和NSLengthFormatter來彌補這一缺失。

這使得NSFormatter子類的數量翻了一倍, 之前只有NSNumberFormatter,NSDateFormatter和NSByteCountFormatter。

雖然這些都是Foundation的子類,但是它們主要都是在HealthKit當中使用。

NSEnergyFormatter

  NSEnergyFormatter使用焦作為能量的原始單位,當處理健康信息時,則使用卡.

let energyFormatter = NSEnergyFormatter()energyFormatter.forFoodEnergyUse = truelet joules = 10_000.0println(energyFormatter.stringFromJoules(joules)) // "2.39 Cal"NSMassFormatter

雖然質量是物質存在的基本單位, 在HealthKit中,它主要指的是身體重量.

let massFormatter = NSMassFormatter()let kilograms = 60.0println(massFormatter.stringFromKilograms(kilograms)) // "132 lb"NSLengthFormatter

NSFormatter的最后一個新子類是NSLengthFormatter. 我們可以把它想象為MKDistanceFormatter的加強版。

let lengthFormatter = NSLengthFormatter()let meters = 5_000.0println(lengthFormatter.stringFromMeters(meters)) // "3.107 mi" CMPedometer

沿著iOS 8的健康路線, CMStepCounter被重新設計了. CMPedometer作為它的改良版本不僅可以即時獲取離散的點數據,并且可以同時跟蹤腳步和距離,甚至計算總共爬了多少級樓梯。

M7芯片真是功能強大.

import CoreMotionlet lengthFormatter = NSLengthFormatter()let pedometer = CMPedometer()pedometer.startPedometerUpdatesFromDate(NSDate(), withHandler: { data, error in if !error {println("Steps Taken: (data.numberOfSteps)")let distance = data.distance.doubleValueprintln("Distance: )data.numberOfSteps)')let distance = data.distance.doubleValueprintln('Distance: lengthFormatter.stringFromMeters(distance))")let time = data.endDate.timeIntervalSinceDate(data.startDate)let speed = distance / timeprintln("Speed: (lengthFormatter.stringFromMeters(speed)) / s") }}) CMAltimeter

在支持的設備上,CMAltimeter可以讓CMPedometer的floorsAscended,floorsDescended數據更加精準:

import CoreMotionlet altimeter = CMAltimeter()if CMAltimeter.isRelativeAltitudeAvailable() { altimeter.startRelativeAltitudeUpdatesToQueue(NSOperationQueue.mainQueue(), withHandler: { data, error inif !error { println("Relative Altitude: (data.relativeAltitude)")} })} CLFloor

CLFloor的引入展示了蘋果進軍室內導航的宏偉計劃,樓層信息將扮演著重要的角色。

import CoreLocationclass LocationManagerDelegate: NSObject, CLLocationManagerDelegate { func locationManager(manager: CLLocationManager!, didUpdateLocations locations: AnyObject[]!) {let location: CLLocation? = locations[0] as? CLLocationif let floor: CLFloor? = location?.floor { println("Current Floor: $$floor?.level)")} }}let manager = CLLocationManager()manager.delegate = LocationManagerDelegate()manager.startUpdatingLocation() HKStatistics

作為一個框架,HealthKit包含著大量的子類和常量。要想全部理解,HKStatistics是一個很好的開始。

HealthKit管理著所有的生理信息,例如:心率,卡路里攝入量,血氧等等,并且通過統一的API聚合在一起。

下面這個例子演示了如何從一天的連續數據中,挖掘和獲取單獨的數據:

import HealthKitlet collection: HKStatisticsCollection? = ...let statistics: HKStatistics? = collection!.statisticsForDate(NSDate())for item: AnyObject in statistics!.sources { if let source = item as? HKSource {if let quantity: HKQuantity = statistics!.sumQuantityForSource(source) { if quantity.isCompatibleWithUnit(HKUnit.gramUnitWithMetricPrefix(.Kilo)) {let massFormatter = NSMassFormatter()let kilograms = quantity.doubleValueForUnit(HKUnit.gramUnitWithMetricPrefix(.Kilo))println(massFormatter.stringFromKilograms(kilograms)) } if quantity.isCompatibleWithUnit(HKUnit.meterUnit()) {let lengthFormatter = NSLengthFormatter()let meters = quantity.doubleValueForUnit(HKUnit.meterUnit())println(lengthFormatter.stringFromMeters(meters)) } if quantity.isCompatibleWithUnit(HKUnit.jouleUnit()) {let energyFormatter = NSEnergyFormatter()let joules = quantity.doubleValueForUnit(HKUnit.jouleUnit())println(energyFormatter.stringFromJoules(joules)) }} }}

NSHipster將會在未來探討更多的HealthKit,敬請關注!

 NSStream +getStreamsToHostWithName

在許多方面,WWDC 2014也是蘋果查漏補遺的一年,比如給NSStream添加了新的initializer(再也不用調用CFStreamCreatePairWithSocketToHost了),這就是:+[NSStream getStreamsToHostWithName:port:inputStream:outputStream:]

var inputStream: NSInputStream?var outputStream: NSOutputStream?NSStream.getStreamsToHostWithName(hostname: "nshipster.com", port: 5432, inputStream: &inputStream, outputStream: &outputStream) NSString -localizedCaseInsensitiveContainsString

這又是一個NSString小而實用的修繕:

let string: NSString = "Café"let substring: NSString = "É"string.localizedCaseInsensitiveContainsString(substring) // true CTRubyAnnotationRef

好吧,此Ruby非彼Ruby. . 這是用來給亞洲文字添加注音符號的.

@import CoreText;NSString *kanji = @"貓";NSString *hiragana = @"ねこ";CFStringRef furigana[kCTRubyPositionCount] = {(__bridge CFStringRef)hiragana, NULL, NULL, NULL};CTRubyAnnotationRef ruby = CTRubyAnnotationCreate(kCTRubyAlignmentAuto, kCTRubyOverhangAuto, 0.5, furigana);

無可否認的是,文檔中并沒有很清晰的描述具體如何將它整合進入你剩下的CoreText中,但是結果如下:

貓ねこ

 新的日歷識別符

iOS 8和OS X中這些新的日歷識別符使得Fundation跟上了CLDR的步伐:

NSCalendarIdentifierCoptic: 亞歷山大日歷, 科普特正教使用.NSCalendarIdentifierEthiopicAmeteMihret: 埃塞俄比亞日歷, Amete MihretNSCalendarIdentifierEthiopicAmeteAlem: 埃塞俄比日歷, Amete AlemNSCalendarIdentifierIslamicTabular: 一個簡單的伊斯蘭星歷.NSCalendarIdentifierIslamicUmmAlQura: 沙特阿拉伯伊斯蘭日歷. NSURLCredentialStorage

自從去年NSURLSession的引入之后,Foundation的URL載入系統并沒有太大的改變。但是,新的NSURLCredentialStorage可以讓你更加方便地以移步,非閉包的方式獲取和存儲密碼。

import Foundationlet session = NSURLSession()let task = session.dataTaskWithURL(NSURL(string: "http://nshipster.com"), completionHandler: { data, response, error in // ...})let protectionSpace = NSURLProtectionSpace()NSURLCredentialStorage.getCredentialsForProtectionSpace(protectionSpace: protectionSpace, task: task, completionHandler: { credentials in // ...}) kUTTypeToDoItem

在比較過最新的API之后,你可能會注意到大量的新UTI常量。其中,kUTTypeToDoItem引起了我的注意:

import MobileCoreServiceskUTTypeToDoItem // "public.to-do-item"

作為一個公共類型,iOS和OS X現在提供了統一的方式讓App之間共享任務。如果你碰巧正在開發一個任務管理工具,正確的整合好這個系統類型應該成為你的首要任務。

 kCGImageMetadataShouldExcludeGPS

許多用戶完全不知道他們用手機拍攝的大部分照片都包含了GPS元數據。更是有數不清的人因為這一個小細節泄露了自己的隱私。

最新的圖片I/O框架中加入了一個新的選項CGImageDestination:kCGImageMetadataShouldExcludeGPS讓你方便的控制是否包含GPS元數據。

@import UIKit;@import ImageIO;@import MobileCoreServices;UIImage *image = ...;NSURL *fileURL = [NSURL fileURLWithPath:@"/path/to/output.jpg"];NSString *UTI = kUTTypeJPEG;NSDictionary *options = @{ (__bridge id)kCGImageDestinationLossyCompressionQuality: @(0.75), (__bridge id)kCGImageMetadataShouldExcludeGPS: @(YES), };CGImageDestinationRef imageDestinationRef =CGImageDestinationCreateWithURL((__bridge CFURLRef)fileURL,(__bridge CFStringRef)UTI,1,NULL);CGImageDestinationAddImage(imageDestinationRef, [image CGImage], (__bridge CFDictionaryRef)options);CGImageDestinationFinalize(imageDestinationRef);CFRelease(imageDestinationRef); WTF_PLATFORM_IOS

#define WTF_PLATFORM_IOS已經從JavaScriptCore中移除.

 WKWebView

UIWebView已死. WKWebView萬歲.

WKWebView提供了Safari級別的性能,并且在UIWebView的基礎上提供了更多的配置選項:

import WebKitlet preferences = WKPreferences()preferences.javaScriptCanOpenWindowsAutomatically = falselet configuration = WKWebViewConfiguration()configuration.preferences = preferenceslet webView = WKWebView(frame: self.view.bounds, configuration: configuration)let request = NSURLRequest(URL: NSURL(string: "http://nshipster.com"))webView.loadRequest(request) NSQualityOfService

線程這個概念已經在蘋果的框架中被系統性的忽略。這對于開發者而言是件好事。

沿著這個趨勢,NSOperation中新的qualityOfService的屬性取代了原來的threadPriority。通過它可以推遲那些不重要的任務,從而讓用戶體驗更加流暢。

NSQualityOfService枚舉定義了以下值:

UserInteractive:和圖形處理相關的任務,比如滾動和動畫。UserInitiated:用戶請求的任務,但是不需要精確到毫秒級。例如,如果用戶請求打開電子郵件App來查看郵件。Utility:周期性的用戶請求任務。比如,電子郵件App可能被設置成每五分鐘自動檢查新郵件。但是在系統資源極度匱乏的時候,將這個周期性的任務推遲幾分鐘也沒有大礙。Background:后臺任務,用戶可能并不會察覺對這些任務。比如,電子郵件App對郵件進行引索以方便搜索。

Quality of Service將在iOS 8和OS X Yosemite中廣泛的應用,所以留意所有能利用它們的機會。

 LocalAuthentication

最后,最令人期待的iOS 8新功能之一:LocalAuthentication。自從iPhone 5S加入TouchID,開發者就對它的應用前景垂涎三尺。

想象一下,只要有CloudKit和LocalAuthentication,創建新賬號的煩惱講不復存在。只需要掃描一下你的手就搞定了!

LocalAuthentication以LAContext的方式工作,驗證聲明的規格,然后返回是否驗證成功。整個過程中,用戶的生物信息都被安全的儲存在硬件當中。

LAContext *context = [[LAContext alloc] init];NSError *error = nil;if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]){ [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:NSLocalizedString(@"...", nil) reply:^(BOOL success, NSError *error) {if (success) { // ...} else { NSLog(@"%@", error);} }];} else { NSLog(@"%@", error);}

雖然這些天每個人都在討論Swift,但是作為一個開發者你更應該關注的是這些iOS 8和OS X Yosemite的新API。它們可以讓你實實在在的_做_一些事。

如果你想接著探索,dive into the iOS 7.1 to 8.0 API diffs可以讓你領會這些變化的重要性。當然,4000多的新API,很多只是細微的改變或者將方法改為屬性,但是,它們值得擁有!

標簽: IOS
相關文章:
主站蜘蛛池模板: 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 | 走心机厂家,数控走心机-台州博城智能科技有限公司 | 收录网| 恒压供水控制柜|无负压|一体化泵站控制柜|PLC远程调试|MCGS触摸屏|自动控制方案-联致自控设备 | 西门子气候补偿器,锅炉气候补偿器-陕西沃信机电工程有限公司 | 杭州中策电线|中策电缆|中策电线|杭州中策电缆|杭州中策电缆永通集团有限公司 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 带压开孔_带压堵漏_带压封堵-菏泽金升管道工程有限公司 | 上海小程序开发-小程序制作-上海小程序定制开发公司-微信商城小程序-上海咏熠 | 100_150_200_250_300_350_400公斤压力空气压缩机-舰艇航天配套厂家 | 合同书格式和范文_合同书样本模板_电子版合同,找范文吧 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 游泳池设备安装工程_恒温泳池设备_儿童游泳池设备厂家_游泳池水处理设备-东莞市君达泳池设备有限公司 | TPE塑胶原料-PPA|杜邦pom工程塑料、PPSU|PCTG材料、PC/PBT价格-悦诚塑胶 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 视觉检测设备_自动化检测设备_CCD视觉检测机_外观缺陷检测-瑞智光电 | 模具钢_高速钢_不锈钢-万利钢金属材料 | 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 重庆轻质隔墙板-重庆安吉升科技有限公司 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 南京雕塑制作厂家-不锈钢雕塑制作-玻璃钢雕塑制作-先登雕塑厂 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 时代北利离心机,实验室离心机,医用离心机,低速离心机DT5-2,美国SKC采样泵-上海京工实业有限公司 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 铁艺,仿竹,竹节,护栏,围栏,篱笆,栅栏,栏杆,护栏网,网围栏,厂家 - 河北稳重金属丝网制品有限公司 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 通风天窗,通风气楼,屋顶通风天窗,屋顶通风天窗公司 | 钢结构-钢结构厂房-钢结构工程[江苏海逵钢构厂] | 道达尔润滑油-食品级润滑油-道达尔导热油-合成导热油,深圳道达尔代理商合-深圳浩方正大官网 | 设计圈 - 让设计更有价值!| 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 双舌接地线-PC68数字式高阻计-ZC36|苏海百科 | 聚合氯化铝-碱式氯化铝-聚合硫酸铁-聚氯化铝铁生产厂家多少钱一吨-聚丙烯酰胺价格_河南浩博净水材料有限公司 | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 哈希PC1R1A,哈希CA9300,哈希SC4500-上海鑫嵩实业有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 无线联网门锁|校园联网门锁|学校智能门锁|公租房智能门锁|保障房管理系统-KEENZY中科易安 | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 天然气分析仪-液化气二甲醚分析仪|传昊仪器|