我遵循了设置套接字流的指南,并在我的课程中有效地复制了该代码.无论我尝试什么代理方法,似乎都没有被调用.
在头文件中我(基本上):
@interface myClass : NSObject <NSStreamDelegate> {
NSInputStream *inputStream;
NSOutputStream *outputStream;
}
- (void)connect;
@end;
Run Code Online (Sandbox Code Playgroud)
连接方法:
- (void)connect {
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)@"host.example.com", 1234, &readStream, &writeStream);
inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
}
Run Code Online (Sandbox Code Playgroud)
也尝试使用CFStreamCreatePairWithSocketToCFHost()和[NSStream getStreamsToHost:port:inputStream:outputStream:- 所有具有完全相同的结果.
我在connect方法的开头设置了一个断点,逐步遍历每一行,每个指针都有效,似乎指向正确的对象.
在GDB中,在setDelegate调用之后,按预期po [inputStream delegate]打印<myClass: 0x136380>,因此它已正确设置委托.
对于我的生活,我无法理解为什么它拒绝stream:handleEvent:在我班上调用这个方法:
- …Run Code Online (Sandbox Code Playgroud) 从下面的代码中可以看出,||=运营商正在从课外进行评估.
class Foo
attr_reader :bar
def baz
self.bar ||= 'baz'
end
private
attr_writer :bar
end
puts Foo.new.baz
# => in `baz': private method `bar=' called for #<Foo:0x007fd9720829a8> (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
引用关于官方扩展的接受答案|| =条件赋值运算符:
In other words, the expansion c = c || 3 is (excluding bugs like in pre-1.9) correct.
Run Code Online (Sandbox Code Playgroud)
重写baz方法self.bar = self.bar || 'baz'不会引发错误.
我正在寻找关于Ruby 如何以及为什么以这种方式表现的明确答案,因为它似乎违反直觉.
这种行为出现在Ruby版本1.9.3,2.0.0和2.1.2上,这让我相信这不是一个错误.
让我们首先列出一些事实:
与此问题类似:如何将elasticache redis群集设置为从属?
关于这可能如何工作的一个想法:
我的问题:
*对于此类工具的任何作者都没有违法行为,我确信它们很棒,我只是对使用同一团队编写的工具更有信心,以避免潜在的兼容性错误.