在实际编写NSOutputStream之前,我需要编写自定义数据。
为了执行swizzling代码,我创建了一个类别NSOutputStream(SwizzleWrite),它包含以下内容:
SEL originalSelector = @selector(write:maxLength:);
SEL swizzledSelector = @selector(swizzledWrite:maxLength:);
Method originalMethod = class_getInstanceMethod([NSOutputStream class], originalSelector);
Method swizzledMethod = class_getInstanceMethod([self class], swizzledSelector);
method_exchangeImplementations(originalMethod, swizzledMethod);然后创建Inout & Output流: CFStreamCreatePairWithSocketToCFHost(kCFAllocatorDefault,hostRef,80,&readStream,&writeStream);
inputStream = (__bridge_transfer NSInputStream *)readStream;
outputStream = (__bridge_transfer NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];但是现在当控件到达handleEvent:委托时,特别是在: outputStream写:rawstring:sizeof(Rawstring);,我没有在swizzledWrite:maxLength上获得它:
我在这里做错什么了?
PS:我已经读到过,swizzling的方法并不是对Appstore友好的,但我也读过它们被接受的案例。
发布于 2014-11-29 08:03:42
你为什么觉得这是最好的选择?听起来像一个子类会好得多。对于流的子类有一些棘手的部分,但是请看一下这里
如果您决心要工作,您是否设置了断点并确保您的swizzling选择器不是零?如果你把签名搞错了
https://stackoverflow.com/questions/27199916
复制相似问题