我们有一个处理SSL的WebSocket安全服务器.我们希望在我们的iOS客户端中放置客户端SSL证书,以确保与服务器通信时的安全性.
因为我们正在使用WebSocket,所以在iOS客户端中,我们使用SocketRocket(Objective-C WebSocket客户端库)来实现WebSocket通信.
问题是我不知道如何将我的客户端SSL证书发送到服务器.
我可以像设置CFStream的属性一样kCFStreamPropertySocketSecurityLevel.但我不知道它是如何工作的.我在CFStream中找不到任何关于证书的文档.
我知道当我们需要连接到HTTPS服务器时,我们可以didReceiveAuthenticationChallenge在NSURLConnection中使用.但据我所知,CFStream中没有对应物.
有人有什么想法吗?
我在.h文件中定义了splitBarArr:
@property (nonatomic, retain) NSMutableArray *splitBarArr;
Run Code Online (Sandbox Code Playgroud)
我还在viewDidUnload中将其设置为nil,并在dealloc中释放它.
为什么XCode仍然说它是潜在的内存泄漏?
当我们需要在块中调用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)
问题解决了.
有谁能解释为什么?还有什么潜在的问题?
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
ios ×3
objective-c ×3
certificate ×1
cocoa-touch ×1
memory-leaks ×1
ssl ×1
websocket ×1
xcode ×1