使用Grand Central Dispatch,可以轻松地在非主线程上执行耗时的任务,避免阻止主要攻击并保持UI响应.只需dispatch_async
在全局并发队列上使用并执行任务即可.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// code
});
Run Code Online (Sandbox Code Playgroud)
然而,听起来好得令人难以置信,因为这个通常有它们的缺点.在我们的iOS应用程序项目中使用了很多之后,最近我们发现它有64个线程限制.一旦我们达到限制,应用程序将冻结/挂起.通过暂停应用程序与Xcode,我们可以看到主线程由semaphore_wait_trap
.
在网上搜索确认其他人也遇到了这个问题,但到目前为止还没有找到解决方案.
达到调度线程硬限制:64(同步操作中阻塞的调度线程太多)
另一个问题计算器证实了这一问题时使用发生dispatch_sync
和dispatch_barrier_async
太.
问题:
由于Grand Central Dispatch有64个线程限制,有没有解决方法?
提前致谢!
问题摘要:在iOS上浏览未使用UIWebView显式指定正确字符编码的非英语网站时,页面无法正确显示.
详细说明:由于loadRequest:
UIWebView中的方法将使用从Web服务器发送的charset头中指定的编码或HTML元标记中编写的charset,并默认为iso-8859-1(好吧,我对此不太了解)当没有指定charset时,导致非英文网站无法正常显示.
我曾尝试过谷歌改变UIWebView使用的字符集的方法,但唯一的方法是使用该loadData:MIMEType:textEncodingName:baseURL:
方法来指定编码名称.
但是,使用loadData:MIMEType:textEncodingName:baseURL:
+ NSURLConnection代替它并不是一个好主意loadRequest:
,因为UIWebView不会调用webView:shouldStartLoadWithRequest:navigationType:
框架的委托方法,即使我们找到了一种在UIWebView加载框架时得到通知的方法,我们也无法调用loadData:MIMEType:textEncodingName:baseURL:
加载框架内容,因为如果我们这样做,它将加载框架作为外部页面.
此外,我曾尝试使用javascript hack,但似乎该属性是只读的,无法更改.
[webView stringByEvaluatingJavaScriptFromString:@"document.characterSet='utf-8';"];
Run Code Online (Sandbox Code Playgroud)
另一种解决方法是将元标记插入HTML,并要求UIWebView加载修改后的代码,但上面提到的框架问题也适用于此处.
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
Run Code Online (Sandbox Code Playgroud)
问题:是否有更好的解决方案可以更改UIWebView中加载的网页中的字符编码,并正确处理框架?
背景
我正在开发一个简单的iPad应用程序,允许用户同时浏览具有不同登录的同一网站.因此我有两个UIWebView
,他们应该有不同的cookie存储,所以用户可以在第一个帐户登录UIWebView
,另一个帐户登录UIWebView
.
我试过了什么?
我认为解决方案是在UIWebView
我拥有的两个中实现不同的cookie存储.
Sasmito Adibowo写了一篇文章实现自己的Cookie存储,它提供了有关如何WebView
在Mac上使用自定义cookie存储的详细信息.
这是通过修改WebView
要发送的NSURLRequest,向其添加cookie标头,并WebView
从响应头拦截响应并从中提取cookie并将其保存到我们自己的cookie存储中来完成的.
从技术上讲,它是通过实现这两个委托方法来完成的:
- (void)webView:(WebView *)sender resource:(id)identifier didReceiveResponse:(NSURLResponse *)response fromDataSource:(WebDataSource *)dataSource
- (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource
Run Code Online (Sandbox Code Playgroud)
虽然它没有记录,UIWebView
但确实支持上述方法之一,方法名称略有不同:
- (NSURLRequest *)uiWebView:(UIWebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(id)dataSource
Run Code Online (Sandbox Code Playgroud)
但是,UIWebView
没有等效的委托方法webView:resource:didReceiveResponse:fromDataSource:
,因此我无法从响应标头中提取cookie.
问题
有没有办法必须UIWebView
使用自定义cookie存储,所以这两个UIWebView
可以拥有自己的cookie存储?
谢谢!
对不起,长标题.我正在用C开发一个网络程序,它可以在stdout上显示从网络接收的消息,并通过GNU readline库接受stdin上的用户输入.问题是,当用户通过readline在主线程上键入命令时,网络消息到达并输出到stdout,这将生成如下内容:
场景:
输入:1234567890
网络消息:Hello
当用户输入"7"时,网络消息到达
终端的实际输出:
输入> 1234567Hello
890_
有没有办法让这样的输出?
你好
输入> 1234567890_
ps _是光标.
提前致谢!
ios ×3
objective-c ×2
uiwebview ×2
c ×1
cookies ×1
iphone ×1
libreadline ×1
pthreads ×1
readline ×1