如何解决ObjCHiredis redis的setUp块

时间:2013-01-19 00:19:08

标签: ios redis

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

- (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");
}

1 个答案:

答案 0 :(得分:0)

最简单的方法可能是在单独的线程上运行连接并使用块来处理主线程上的响应。

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

+(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); });
    });
}