小编nic*_*eng的帖子

如何在我的iOS应用程序中使用CFStream将客户端SSL证书发送到服务器?

我们有一个处理SSL的WebSocket安全服务器.我们希望在我们的iOS客户端中放置客户端SSL证书,以确保与服务器通信时的安全性.

因为我们正在使用WebSocket,所以在iOS客户端中,我们使用SocketRocket(Objective-C WebSocket客户端库)来实现WebSocket通信.

问题是我不知道如何将我的客户端SSL证书发送到服务器.

我可以像设置CFStream的属性一样kCFStreamPropertySocketSecurityLevel.但我不知道它是如何工作的.我在CFStream中找不到任何关于证书的文档.

我知道当我们需要连接到HTTPS服务器时,我们可以didReceiveAuthenticationChallenge在NSURLConnection中使用.但据我所知,CFStream中没有对应物.

有人有什么想法吗?

ssl certificate websocket ios

5
推荐指数
1
解决办法
4564
查看次数

为什么Xcode说它可能泄漏?

我在.h文件中定义了splitBarArr:

@property (nonatomic, retain) NSMutableArray *splitBarArr;
Run Code Online (Sandbox Code Playgroud)

我还在viewDidUnload中将其设置为nil,并在dealloc中释放它.

为什么XCode仍然说它是潜在的内存泄漏?

我在这里:http://i.stack.imgur.com/3LMMZ.png

xcode memory-leaks memory-management objective-c ios

2
推荐指数
1
解决办法
84
查看次数

在块中调用weakSelf时未调用Setter

当我们需要在块中调用self时,我们通常会这样做:

__typeof(&*self) __weak weakSelf = self;
Run Code Online (Sandbox Code Playgroud)

问题是,当你weakSelf.prop = @"string"在块中调用时,setProp:永远不会调用setter .

但如果你这样定义:

__typeof(&*self) fakeSelf = self;
Run Code Online (Sandbox Code Playgroud)

问题解决了.

有谁能解释为什么?还有什么潜在的问题?

objective-c objective-c-blocks

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

如何避免嵌套块

GCD和街区非常好,方便.但是当我爱上它时,我发现发生了一件坏事.请看下面的代码:

[self functionA:^(BOOL success) {
  if (success) {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
      [self functionB:^(NSError *error) {
        if (error != nil) {
          dispatch_async(dispatch_get_main_queue(), ^(void) {
            [self functionC:^(id result) {
              if (result) {
                [self functionD:^(BOOL success) {
                  if (success) {
                    [self DoSomething];
                  }
                }];
              }
            }];
          });
        }
      }];
    });
  }
}];
Run Code Online (Sandbox Code Playgroud)

疯?是.我遇到了这个麻烦.

有没有人有避免像这样的嵌套块的经验?

编辑:

多谢你们.确切地说,我们有更优雅的方法来做到这一点.如:

  • 事先声明块
  • 使子块成为独立的功能

但我期望的是一般解决方案.也许是这样的:(下面的伪代码)

functionA.flat.success = [self functionB];
functionB.flat.isntnil = [self functionC];
functionB.flat.error = {};
functionC.flat.isntnil = [self functionD];
[flat call:functionA];
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c grand-central-dispatch ios objective-c-blocks

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