小编how*_*ghk的帖子

Grand Central Dispatch中线程限制的解决方法?

使用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_syncdispatch_barrier_async太.

问题:
由于Grand Central Dispatch有64个线程限制,有没有解决方法?

提前致谢!

objective-c grand-central-dispatch ios

32
推荐指数
1
解决办法
9311
查看次数

如何在UIWebView中更改字符编码?

问题摘要:在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中加载的网页中的字符编码,并正确处理框架?

iphone character-encoding uiwebview ios

22
推荐指数
1
解决办法
1万
查看次数

为两个UIWebView分别存储cookie?

背景
我正在开发一个简单的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存储?

谢谢!

cookies objective-c uiwebview ios

12
推荐指数
1
解决办法
2855
查看次数

如何在使用GNU readline从stdin读取时将消息输出到另一个线程上的stdout而不会弄乱输入?

对不起,长标题.我正在用C开发一个网络程序,它可以在stdout上显示从网络接收的消息,并通过GNU readline库接受stdin上的用户输入.问题是,当用户通过readline在主线程上键入命令时,网络消息到达并输出到stdout,这将生成如下内容:

场景:

输入:1234567890
网络消息:Hello
当用户输入"7"时,网络消息到达

终端的实际输出:

输入> 1234567Hello
890_

有没有办法让这样的输出?

你好
输入> 1234567890_

ps _是光标.

提前致谢!

c pthreads readline libreadline

6
推荐指数
1
解决办法
1255
查看次数