- 浏览: 676013 次
- 性别:
- 来自: 深圳
最新评论
-
fingerplay:
请问一下,第一份,逻辑树,就是代码里可以操纵的,例如更改lay ...
UIView与CALayer -
ok_lyc:
分享到哪里去了
iPhoneUIFont各种字体 -
lliiqiang:
我的个人理解:wait方法是在java虚拟机层面上在获取对象锁 ...
JAVA多线程同步wait、notify、synchronized -
milixw:
谢谢分享,就在找这个
iphone 推送通知 java 实现 -
wsqwsq000:
你的log4j包不行,上网搜一下:log4j-1.2.16.j ...
iphone 推送通知 java 实现
在这篇文章中,我将讲述如何在iOS中的UIWebView中加载一个网页,使用修正的NSURLCache来用本地网页资源复本来代替基于远程网页的数据复本。 介绍 正常情况下当你需要写一个具备网络连接的iOS程序,你会想要一个本地的iOS接口能够接收网络上的所有数据。 然而,在项目中总是有一些限制你可以实现的东西,而且有时候你可能想要为用户显示一个规整的页面。 如果你打算采用这种方式,你最好确信网络接口尽可能流畅。你可以采取的措施之一是将图片的本地复本和其他非更新的资源包含到程序中。 为了在一个远程加载的网页中使用本地资源,或者需要远程页面以某种方式参考本地资源(例如通过URL主题),或者需要用本地地址来代替远程地址。 在这个文章中,我将讲述当网页包含远程资源时如何用本地资源来替代。 NSURLCache 在Mac上,你可以在WebViewDelegate上使用一系列不同的方式来实现,包括实现webView:resource:willSendRequest:redirectResponse:fromDataSource来使得NSURLRequest代替另一个。不幸的是,iOS中的UIWebViewDelegate并不如此好用因此我们需要以另外的方式来实现。 幸运的是,还有一点你可以利用:就是NSURLCache在几乎每个请求下都会被调用。 正常情况下,只有很少的数据存储在NSURLCache中,特别是在更旧的iOS设备上,这个存储区很小。即使你利用setMemoryCapacity:函数来增加这个缓存的大小,它相对于Mac上的NSURLCache来说还是太小了以至于不能存储资源。 当然在这个例子中那不是问题,因为我们将会子类化NSURLCache并且实现自定义的版本,该版本将保证可以存储我们所需的资源而且不需要pre-caching(在程序运行之前所有的资源都要保证准备在存储去内)。 唯一一个我们需要重写的函数是cachedResponseForRequest:,这能够允许我们在它发送前查看每一个请求而且如果我们需要的话返回本地数据。 在这个代码中,我会使用词典来将远程URL映射为在本地程序相关库中的资源的文件名。如果一个请求是指向特定的URL,那么将返回本地文件内容。 下面给出了这个词典。 只要针对URL:http://image.apple.com/global/nav/images/globalnavbg.png请求发出,那么下面的cachedResponseForRequest:可以利用资源文件夹中的fakeGlobalNavBG.png文件来代替。 设置我们的缓存区作为共享缓存 一个UIWebView试图使用当前的+[NSURLCache sharedURLCache]。为了调用我的代码,你需要创建一个NSURLCache的子类并且调用+[NSURLCache setSharedURLCache:]。 这里需要注意:一旦你设置新的网络缓存,你可能打算保持它工作直到你的程序退出。 当UIWebView向你的NSURLCache请求资源时,它假设NSURLCache具备NSCachedURLResponse。如果当UIWebView正在使用它的时候你释放了NSCachedURLResponse,有可能你的程序会崩溃。 不幸的是,迫使WebKit释放它的参考(references)—在某些例子里它何时释放是不确定的。只有WebKit去调用removeCachedResponseForRequest:的时候它才通知你可以丢弃那些资源。 这意味着你必须保证程序中只有一个NSURLCache,在application:didFinishLaunchingWithOptions方法中进行设置并且不要移去它。 一个限制 显然地,如果你设置了要用来存储本地数据的缓存区,只有一个查看缓存区的请求才是使其生效。 这意味这如果URL请求是requestWithURL:cachePolicy:timeoutInterval:,缓存策略是NSURLRequestReloadIgnoringCacheData,那么这个请求将忽略本地替代。 默认情况下,NSURLRequests的缓存策略是NSURLRequestUseProtocolCachePolicy。这个HTTP的缓存策略是相当复杂的而且我从来没有见过一个正常的NSURLRequest忽视缓存,这些规则可能会在某些情况下产生它忽视缓存的情况。如果这些情况发生的话,你的程序应该保持正常工作。 本地替代缓存示例程序 利用我们的NSURLCache子类调用了后,顶部灰色链接栏上的灰色链接按钮被在本地资源文件中的蓝色图像所代替。 结论: 这个工作的意图是允许UIWebView响应更灵敏而且更像本地用户界面。 事实上,UIWebView决不会具有本地用户界面那样的集成度和灵敏的响应。但是 使得本地存储尽可能多的资源有助于尽可能少的带给用户不好的体验。cachedResponseForRequest:
1
2
3
4
5
6
7
8
- (NSDictionary *)substitutionPaths
{
return
[NSDictionary dictionaryWithObjectsAndKeys:
@"fakeGlobalNavBG.png",
@"http://images.apple.com/global/nav/images/globalnavbg.png",
nil];
}
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request
{
// Get the path for the request
NSString *pathString = [[request URL] absoluteString];
// 判断我们是否为这个路径提供了替代资源
NSString *substitutionFileName = [[self substitutionPaths] objectForKey:pathString];
if (!substitutionFileName)
{
// 没有替代资源,返回默认值
return [super cachedResponseForRequest:request];
}
// 如果我们已经创建了一个缓存实例,那么返回它
NSCachedURLResponse *cachedResponse = [cachedResponses objectForKey:pathString];
if (cachedResponse)
{
return cachedResponse;
}
// 获得替代文件的路径
NSString *substitutionFilePath =
[[NSBundle mainBundle]
pathForResource:[substitutionFileName stringByDeletingPathExtension]
ofType:[substitutionFileName pathExtension]];
NSAssert(substitutionFilePath,
@"File %@ in substitutionPaths didn't exist", substitutionFileName);
// 加载替代数据
NSData *data = [NSData dataWithContentsOfFile:substitutionFilePath];
// 创建可缓存的响应
NSURLResponse *response =
[[[NSURLResponse alloc]
initWithURL:[request URL]
MIMEType:[self mimeTypeForPath:pathString]
expectedContentLength:[data length]
textEncodingName:nil]
autorelease];
cachedResponse =
[[[NSCachedURLResponse alloc] initWithResponse:response data:data] autorelease];
// 为后续响应,把它加入我们的响应词典中
if (!cachedResponses)
{
cachedResponses = [[NSMutableDictionary alloc] init];
}
[cachedResponses setObject:cachedResponse forKey:pathString];
return cachedResponse;
}
LocalSubstitutionCache.zip
下面是程序截图
发表评论
-
iphone开发如何后台播放音频
2012-12-25 14:38 1558<!--?xml version="1.0&q ... -
iPhone开发中使用AVAudioPlayer出现内存泄漏的解决办法
2012-12-25 11:53 3345最近在使用AVAudioPlayer播放音频时,发现 ... -
dispatch多线程
2012-10-31 20:45 1454#define kBgQueue dispat ... -
iPhone开发使用数组排序
2012-10-30 19:18 1787我们以数组的排序为例(也许NSSortDes ... -
用containsObject判断是否存在的问题
2012-10-16 15:37 4561在NSArray或NSMutableArray中想使用c ... -
用NSZombieEnabled解决恼人的EXC_BAD_ACCESS错误
2012-09-17 10:30 1377转载自:http://longtimenoc.com/a ... -
使用xib加载视图后,在dealloc中crash
2012-09-08 11:20 1766最近遇到个问题,就是使用xib加载视图后,经常会 ... -
iPhone中如何获取当前输入法
2012-09-06 16:28 1696如题,在iPhone开发中,我们如何获取当前的输入 ... -
objectForKey和valueForKey的区别
2012-08-24 17:23 2162valueforkey和objectforkey区别 ... -
粒子发射系统中的CAEmitterLayer
2012-08-22 16:00 2518简介:CAEmitterLayer提供了一个基于 ... -
iPhone开发使用UILineBreakMode不精确
2012-07-26 12:02 1551一开始用UILineBre ... -
Xcode方法提示不显示的解决办法
2012-07-24 09:45 1611Xcode方法提示显示的不正确,只显示方法 ... -
NSArray的排序功能sortedArrayUsingSelector
2012-07-18 17:54 2228- (NSArray *)sortedArrayUs ... -
iPhoneUIFont各种字体
2012-07-24 09:45 1560苹果开发者们想在应用中使用不同字体的话,往往会发现 ... -
iPhone使用ASIHTTPRequest请求时,发送了2次请求
2012-07-24 09:45 2554前段时间用到ASIHTTPRequest做请求时, ... -
iPhone开发调用新浪微博OAuth2.0
2012-06-05 02:30 3102就像题目说的,这次的小项目是做一个新浪微博的客 ... -
Iphone cover flow 开源实现
2012-06-04 00:04 886tapkulibrary-CloverFlow ... -
ASIHTTPRequest下载示例(支持断点续传)
2012-07-24 09:45 1593在工程中,我们会常常遇到需要下载的程序,比 ... -
ASIHTTPRequest类库简介和使用说明
2012-07-24 09:45 1694文章转载自:http: ... -
NSUserDefaults 用户偏好设定保存自定义类(序列化)
2012-04-17 23:30 0NSUserDefaults 用户偏好设定保存 ...
相关推荐
一个利用继承NSURLCache来达到利用本地数据代替远程UIWebView请求的实例,非常实用。
NSURLCache让本地数据来代替远程UIWebView请求
在UIWebView中加载本地图片,http://blog.csdn.net/zhangao0086/article/details/7262192
uiwebview播放视频 iphone开发 ,一个demo
这是iPhone开发之UIWebView示例程序,具体参考: http://blog.csdn.net/htttw/article/details/7888557
IOS自定义请求uiwebview的loading框 支持文字和转圈特效同时存在 动态显示 调用方便
IOS开发中因为引入cocos2dx,导致代码审核不通过无法提交( Apple will stop accepting submissions of apps that use UIWebView APIs )。该问题的解决方案有两种:1)升级Cocos2dx的版本,在查看Cocoas官网及Cocoas...
服务器将MIME的标识符等放入传送的数据中告诉浏览器使用那种插件读取相关文件。 uiwebview加载各种本地文件(通过loadData方法): UIWebView加载内容的三种方式: 1 加载本地数据文件 指定文件的MIMEType 编码...
方法,通过调用参数request对象的URL属性来获取关于本次请求的地址以及参数信息,因此可以通过js代码模拟一次特殊的网络请求来达到调用该代理方法的作用,并通过过滤“特殊的url”来达到有目的性的js代码调用native...
NULL 博文链接:https://bewithme.iteye.com/blog/2105282
UIWebView+html+css,实现UIWebView中可点击链接,并且可显示gif动画效果
UIWebview使用中的js交互简单的简析 欢迎大家指点 共同学习
这是我在学习ios的过程中写的一个demo,使用UIWebView实现一个简单的浏览器
UIWebView和js交互 里边自己写了个H5方便大家理解
UIWebView与JS交互小例子,其中涉及APP向JS提交信息,和JS提交信息给App
UIWebView Web 网页 Demo 代码
使用UIWebView和JS进行交互,可以OC操作js,也可以JS对OC进行交互
网页视图的基本使用,网络资源地址字符串的处理,UIWebView属性与协议的综合使用;
UIWebView实现图文混排