问题: 为什么会崩溃?
描述:

代码如下:

+ (void)load{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Class class = [NSURLConnection class];
        SEL selector = @selector(initWithRequest:delegate:);
        SEL swizzledSelector = @selector(test_initWithRequest:delegate:);
        Method originalinitWithRequest = class_getInstanceMethod(class, selector);
        NSURLConnection* (^swizzleBlock)(NSURLConnection *,SEL,NSURLRequest*,id )= ^(NSURLConnection *slf,SEL swizzledSelector,NSURLRequest *request,id delegate) {
            return ((NSURLConnection*(*)(NSURLConnection*,SEL,NSURLRequest*,id))objc_msgSend)(slf,swizzledSelector,request,delegate);

        };

        IMP implementation = imp_implementationWithBlock(swizzleBlock);
        class_addMethod(class, swizzledSelector, implementation, method_getTypeEncoding(originalinitWithRequest));
        Method newConnectionWithRequestClassMethod = class_getInstanceMethod(class, swizzledSelector);
        method_exchangeImplementations(originalinitWithRequest, newConnectionWithRequestClassMethod);
    });
}

我看了半天没发现什么问题,为什么这样一交换之后运行就会崩溃。
在return 时候打断点,信息如下:

(lldb) po slf
 { request: (null) }

(lldb) po swizzledSelector
 { URL: http://httpstat.us/200 }

(lldb) po request


(lldb) po delegate
 nil

崩溃信息如下:

1 2 下一页
上一篇微信浏览器ios点击输入框后整个页面消失?
下一篇包含ab但不包含a
明星图片
相关文章
《 为什么会崩溃?》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)