ios - 如何解决ObjCHiredis redis的setUp block

标签 ios redis

当我使用 ObjCHiredis redis 连接到无效的 IP 和端口时,它会被阻止。 如何将其设置为非阻塞模式?谢谢

- (void)setUp {
NSLog(@"begin setUp");
NSString *ip = @"125.124.125.125";
self.redis = [ObjCHiredis redis:ip on:[NSNumber numberWithInt:123] db:[NSNumber numberWithInt:0]];
if(self.redis == nil)
{
    NSLog(@"init redis error.");
    return ;
}
 NSLog(@"end setUp");
}

最佳答案

执行此操作的最简单方法可能是在单独的线程上运行连接并使用 block 来处理返回到主线程的响应。

这是我经常用来执行任何类型的异步任务的辅助方法。 我已经对其进行了调整,因此它应该适用于您正在尝试做的事情:

+(void)threadedConnect:(NSString*)ip On:(int)port DB:(int)db WithResponseTask:(void(^)(ObjCHiredis *redis))task
{
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

    dispatch_async(queue, ^{

        ObjCHiredis *redis = [ObjCHiredis redis:ip
                                on:[NSNumber numberWithInt:port]
                                db:[NSNumber numberWithInt:db]];

        // Run completion block back on main thread with result as argument
        dispatch_async(dispatch_get_main_queue(), ^{ task(redis); });
    });
}

关于ios - 如何解决ObjCHiredis redis的setUp block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14409753/

相关文章:

node.js - node_redis 获取 zrange withscores

ios - 在 iOS 7 的 UITableView 上指示加载事件的正确方法是什么?

ios - 快速拍照时前置摄像头自动变焦

iOS:在启用自动布局的情况下在代码中设置 View 大小

node.js - 如何以阻塞方式访问redis而不是nodejs中的非阻塞(事件回调)

ruby-on-rails - Rails with Redis 和 Devise 不工作

php - 多线程实现模式

ios - 未使用自定义 UICollectionViewLayout 调用 cellForItemAtIndexPath

android - 是否有可能为 android + iOS 制作一个实际上只是一个网络应用程序的应用程序?

c# - redis c# 客户端,我如何获得订阅者计数?