IOS编程之iOS 7系列译文:iOS7的多义务处置仓酷云
父类是NSObjectUIKit里最底层的库可以响应一些触摸事件设置焦点等功能UIView父类是UIResponder所有View的父类方法太多了大部分很有用这个不赘述了在iOS7之前,当程序加入后,开辟者对程序几近做不了甚么。除VOIP和基于地位的特征,独一可以在背景运转代码的路子只要利用背景义务(backgroundtasks),但背景义务只会实行几分钟。假如你想要下载一部很年夜的视频以便离线寓目,大概将用户图片备份到服务器,你只能完成部分的义务。ios7新增加了两个能够在背景更新使用程序界面和内容的APIs。第一个API是背景猎取(BackgroundFetch),同意你在按期距离内从收集猎取新内容。第二个API是远程关照(RemoteNotification),它是一个新特征,它在当新事务产生时使用推送关照(PushNotifications)往告诉程序。这两个新的机制,匡助你坚持程序界面最新,还能够在新的背景传输服务(BackgroundTransferService)中布置义务,这同意你在历程外实行收集传输(下载和上传)。
背景猎取(BackgroundFetch)和远程关照(RemoteNotification)基于复杂的使用程序托付钩子,在使用程序挂起之前的30秒时钟工夫入手下手实行事情。它们不是用于CPU频仍事情大概长工夫运转义务,而是用来处置长工夫运转的收集哀求行列,比方下载一部很年夜的影戏,大概实行疾速的内容更新。
在用户看来,多义务处置独一分明的变更就是新的程序切换器(appswitcher),它会显现当程序加入前台时每个程序的界面快照。显现这些快照是有缘故原由的:当完成背景事情时,开辟者能够更新程序快照,显现新内容的预览。交际收集,旧事,大概天色的使用程序,能够在用户不翻开使用程序的情形下显现最新的内容。接上去我们会展现怎样更新快照。
背景猎取(BackgroundFetch)
背景猎取(BackgroundFetch)是一种智能的轮询机制,它很合适必要常常更新内容的程序,像交际收集,旧事或天色的程序。为了在用户启动程序条件前触发背景猎取,体系会依据用户举动叫醒使用程序。举个例子,假如用户常常鄙人午1点利用某个使用程序,体系会进修,顺应并在利用周期前实行背景猎取。为了削减电池利用,背景猎取(BackgroundFetch)会跨使用程序被设备的无线电兼并,假如你向体系呈报新数据没法猎取,iOS会顺应并利用此信息制止会持续猎取。
开启背景猎取的第一步是在infoplist文件中的UIBackgroundModes健值指定利用的特征。最复杂的路子是在Xcode5的projecteditor中新的功能标签页中(Capabilitiestab)设置,这个标签页包括了背景形式部分,能够便利设置多义务选项。
<br>
大概,你能够手动编纂这个健值:
1
2
3
4
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
</array>
下一步,告知iOS你但愿多久举行一次背景猎取:
1
2
3
4
5
6
-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
;
returnYES;
}
iOS默许不举行背景猎取,以是你必要设置一个工夫距离,不然,你的使用程序永久不可在背景举行猎取数据。UIApplicationBackgroundFetchIntervalMinimum这个值请求体系尽量常常往办理使用程序甚么时分会被叫醒,但假如不必要这个值,你应当指定你的工夫距离。比方,一个天色的使用程序,大概只必要几个小时才更新一次,iOS将会在背景猎取之间最少守候你指定的工夫距离。
假如你的使用同意用户加入登录,那末就没有猎取新数据的必要了,你应当把minimumBackgroundFetchInterval设置为UIApplicationBackgroundFetchIntervalNever,如许能够节俭资本。
最初一步是在使用程序托付中完成以下办法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-(void)application:(UIApplication*)application
performFetchWithCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler
{
NSURLSessionConfiguration*sessionConfiguration=;
NSURLSession*session=;
NSURL*url=[initWithString:@"http://yourserver.com/data.json"];
NSURLSessionDataTask*task=[sessiondataTaskWithURL:url
completionHandler:^(NSData*data,NSURLResponse*response,NSError*error){
if(error){
completionHandler(UIBackgroundFetchResultFailed);
return;
}
//Parseresponse/dataanddeterminewhethernewcontentwasavailable
BOOLhasNewData=...
if(hasNewData){
completionHandler(UIBackgroundFetchResultNewData);
}else{
completionHandler(UIBackgroundFetchResultNoData);
}
}];
//Startthetask
;
}
体系叫醒使用程序后将会实行这个托付办法。必要注重的是,你只要30秒的工夫来断定猎取的新内容是不是可用,然后处置新内容并更新界面。30秒工夫应当充足往从收集猎取数据和猎取界面的缩略图,最多只要30秒。当完成了收集哀求和更新界面后,你应当挪用完成的处置代码。
完成的处置代码有两个目标。起首,体系会估计你的历程损耗的电量,并依据你传送的UIBackgroundFetchResult参数纪录新数据是不是可用。其次,当你挪用完成的处置代码时,使用的界面缩略图会被接纳,并更新使用程序切换器。当用户在使用间切换时,用户将会看到新内容。这类快照举动的完成代码,在新的多义务处置APIs中,很很罕见的。
在实践使用中,你应当将completionHandler传送到使用程序的子组件,然后在处置完数据和更新界面后挪用。
在这里,你大概想晓得iOS是怎样在使用程序背景运转时取得界面快照的,而且想晓得使用程序的性命周期与背景猎取之间有甚么干系。假如使用程序处于挂起形态,体系会先叫醒使用,然后再挪用application:performFetchWithCompletionHandler:。假如使用程序还没有启动,体系将会启动它,然后挪用罕见的托付办法,包含application:didFinishLaunchingWithOptions:。你能够把这类使用程序运转的体例想像为用户从Springboard启动这个程序,区分仅仅在于界面是看不见的,在屏幕外衬着的。
年夜多半情形下,不管使用在背景启动大概在前台,你会实行不异的事情,但你能够经由过程检察UIApplication的applicationState属性来判别使用是否是从背景启动。
1
2
3
4
5
6
-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
NSLog(@"Launchedinbackground%d",UIApplicationStateBackground==application.applicationState);
returnYES;
}
测试背景猎取(TestingBackgroundFetch)
有两种能够摹拟背景猎取的路子。最复杂是从Xcode运转你的使用,当使用运转时,在Xcode的Debug菜单选择SimulateBackgroundFetch.
<p>第二种办法,利用scheme变动Xcode运转程序的体例。在Xcode菜单的Product选项,选择Scheme然后选择ManageSchemes.在这里,你能够编纂大概增加一个新的
管理你的ViewController的层次可以自己写View切换的动画关掉他默认的动画文档:还有个蛋疼的UIWindow都快忘了他了因为iOS是从MacosX过来的很多工具直接拿来用这个UIWindow就是在iOS里每个App独占屏幕所以同时存在的只有一个UIWindow 这个办法就是在WindowsXP或Win7的电脑上,使用vmware虚拟机来搭建一个真实的Mac OS X环境。 看《iPhone 4与iPad开发基础教程》,跟着一步步来 开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦 看完这个你就可以有多种选择来踏入做应用的阶段 在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解 最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。 培训的时候很痛苦,每天要待12个小时,上午讲课,下午和晚自习解决作业,看文档,学习的时候感觉就是资料太少,而且看着资料也不明所以,非常痛苦, 这个办法就是在WindowsXP或Win7的电脑上,使用vmware虚拟机来搭建一个真实的Mac OS X环境。 其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。 要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。 在此,某不才愿将安装成功的Mac OS X系统的vmware虚拟机向有志学习iOS开发的各位学友们免费开放出来,经测试,可以在WindowsXP/Win7系统上完美运行,即便你的机器只有2GB内存。 好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。 有办法利用自己手头的电脑立刻开始这个美妙旅程的。 在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解 学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。 看完这个你就可以有多种选择来踏入做应用的阶段 自从苹果公司开放iOS SDK以来,大量的国内外的软件开发者将关注的目光聚集在苹果的iOS平台上。由于iPhone和iPad自一出现就给人带来了颠覆性的感觉 学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。 培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。
页:
[1]