美文网首页首页投稿(暂停使用,暂停投稿)
还在愁一进公司不知道当前页面的 控制器是哪个嘛? runtim

还在愁一进公司不知道当前页面的 控制器是哪个嘛? runtim

作者: 马爷 | 来源:发表于2016-05-18 16:15 被阅读153次

    首先 第一个 就是创建一个 UIviewcontroller 的分类
    其次就是

    + (void)load
    {
    //方法交换应该被保证 在程序中只能执行一次
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        //获取 viewcontroller 的生命周期方法
        SEL systemMethod = @selector(viewWillAppear:);
        SEL systemMethodDis = @selector(viewWillDisappear:);
        //自己实现将要交换的方法
        SEL changeMethod = @selector(statistics_viewWillAppear);
        SEL changeMethodDis = @selector(statistics_viewWillDisappear);
        
        //来个方法的 method
        Method system = class_getInstanceMethod([self class], systemMethod);
        Method change = class_getInstanceMethod([self class], changeMethod);
        
        Method systemDis = class_getInstanceMethod([self class], systemMethodDis);
        Method changeDis = class_getInstanceMethod([self class], changeMethodDis);
        
        //首先动态添加方法 实现是被交换的方法 返回值表示成功或者失败
        BOOL isAdd = class_addMethod(self, systemMethod, method_getImplementation(change), method_getTypeEncoding(change));
        if (isAdd) {
            //如果成功 说明类中不存在这个方法的实现
            //将被交换方法的实现替换到这个并不存在的实现
            class_replaceMethod(self, changeMethod, method_getImplementation(system), method_getTypeEncoding(system));
        } else {
            //交换来个方法的实现
            method_exchangeImplementations(system, change);
        }
        
        
        BOOL isDis = class_addMethod(self, systemMethodDis, method_getImplementation(changeDis), method_getTypeEncoding(changeDis));
        if (isDis) {
            class_replaceMethod(self, changeMethodDis, method_getImplementation(systemDis), method_getTypeEncoding(systemDis));
        } else {
            method_exchangeImplementations(systemDis, changeDis);
        }
        
    });
    }
    
    - (void)statistics_viewWillAppear
    {
        NSLog(@"看我现在  进去  那个类了 %@", [self class]);
    }
    
    - (void)statistics_viewWillDisappear
    {
        NSLog(@"看我现在  出去  这个类了 %@", [self class]);
    }

    相关文章

      网友评论

        本文标题:还在愁一进公司不知道当前页面的 控制器是哪个嘛? runtim

        本文链接:https://www.haomeiwen.com/subject/lvewrttx.html