[英]Not able to swizzle NSOutputStream's write:MaxLength:
在實際寫入NSOutputStream之前,我需要編寫自定義數據。
為了執行混亂的代碼,我創建了一個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 write:rawstring maxLength:sizeof(rawstring)]; ,我沒有在swizzledWrite:maxLength上得到它:
我在這里做錯了什么?
PS:我讀過繁雜的Apple方法不適合Appstore使用,但我也讀過一些被接受的案例。
為什么您覺得在這里打噴嚏是最好的選擇? 在我看來,子類會更好。 關於流的子類化,有一些棘手的部分,但請看這里
如果確定要使工作混亂,是否已設置斷點並確保您的混亂選擇器不為零? 如果簽名有誤,可能會發生
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.