Runtime运用:动态跳转到任何一个类

研究runtime一段时间后,发现runtime的运用其实很广泛。一个功能的实现也有很多种方法,主要是看我们是否会运用所掌握的知识。

以前遇到过,从服务器获取一部分数据展示一个轮播图。点击轮播图中不同的图片进入到不同的界面。像这样:


轮播图
  • 首先想到的写法是,根据参数写if else判断进入哪个类,然后进行创建、跳转。
  • 学习runtime后,我们可以根据类名获取一个类,像这样:
    Class newClass = objc_getClass(className);
    那我们就可以让服务器把类名传给我们,我们直接通过类名获取到对应的类,进行跳转即可。不需要if else判断,所有的类都统一处理。
    // 这个规则肯定事先跟服务端沟通好,跳转对应的界面需要对应的参数
    NSDictionary *userInfo = @{
                               @"class": @"PushViewController",//类名
                               @"alertStr": @"要提示的内容"//这个类需要的参数
                               };
    
    const char * className = [userInfo[@"class"] cStringUsingEncoding:NSASCIIStringEncoding];
    Class newClass = objc_getClass(className);
    if (!newClass) {//如果没有这个类,进行创建
        
        Class newClass = objc_allocateClassPair([UIViewController class],className , 0);
        objc_registerClassPair(newClass);
        
    }
    //传递至给newClass
    id instance = [[newClass alloc] init];
    [instance setValue:userInfo[@"alertStr"] forKey:@"alertStr"];
    
    // 跳转到对应的控制器
    [self.navigationController pushViewController:instance animated:YES];
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容