您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> IOS >> 为什么会崩溃?

为什么会崩溃?(1/2)

来源:网络整理     时间:2017/12/28 11:41:12     关键词:

关于网友提出的“ 为什么会崩溃?”问题疑问,本网通过在网上对“ 为什么会崩溃?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

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

代码如下:

+ (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

崩溃信息如下:

相关图片

相关文章