• OC中NSClassFromString()与NSStringFromClass()的用法及应用场景


    1.NSClassFromString()利用一个字符串创建一个类,我是在标签控制器中 UITabBarController中创建它的子控制器中使用的

     1 - (void)viewDidLoad {
     2     [super viewDidLoad];
     3     self.view.backgroundColor = [UIColor whiteColor];
     4     
     5     [self addChildViewControllerWithClassName:[ZSHomeViewController description] title:@"首页" imageName:@"home"];
     6     [self addChildViewControllerWithClassName:[ZSDiscoveryViewController description] title:@"发现" imageName:@"Found"];
     7     [self addChildViewControllerWithClassName:[ZSCheckViewController description] title:@"审核" imageName:@"audit"];
     8     [self addChildViewControllerWithClassName:[ZSMessageViewController description] title:@"消息" imageName:@"newstab"];
     9     
    10 }
    11 
    12 ///添加子控制器
    13 - (void)addChildViewControllerWithClassName:(NSString *)className title:(NSString *)title imageName:(NSString *)imageName{
    14     //这么创建的好处是当没有这个对象时,程序不会崩溃
    15     UIViewController *vc = [[NSClassFromString(className) alloc]init];
    16     ZSBaseNavigationViewContrllerView *nav = [[ZSBaseNavigationViewContrllerView alloc]initWithRootViewController:vc];
    17     nav.tabBarItem.title = title;
    18     nav.tabBarItem.image = [UIImage imageNamed:imageName];
    19     //渲染方式,UIImageRenderingModeAlwaysOriginal始终绘制图片的原始状态,不使用tintColor
    20     //UIImageRenderingModeAutomatic  // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。
    21     //UIImageRenderingModeAlwaysTemplate   // 始终根据Tint Color绘制图片,忽略图片的颜色信息。
    22     nav.tabBarItem.selectedImage = [[UIImage imageNamed:[imageName stringByAppendingString:@"_press"]]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    23     
    24     [self addChildViewController:nav];
    25 }

    这么做的好处是当你的控制器不存在时,这么创建不会让程序崩溃

    2.NSStringFromClass() 获取与类型名称同名的字符串

    它的应用场景一般是动态的创建类,我是用它创建自定义cell的对象,因为每一种cell都要有不同的ReuseIdentifier,在工程中我们会遇到henduo需要自定义的cell,那么这么做就可以很方便的设置cell的id

    1 + (instancetype)cellWithTableView:(UITableView *)tableView{
    2     if (self == nil) {
    3         return [[self alloc]init];
    4     }
    5     NSString *className = NSStringFromClass([self class]);
    6     NSString *identifier = [className stringByAppendingString:@"CellId"];
    7     [tableView registerClass:[self class] forCellReuseIdentifier:identifier];
    8     return [tableView dequeueReusableCellWithIdentifier:identifier];
    9 }
  • 相关阅读:
    Python记录12:迭代器+生成器+生成式
    Python记录11:叠加多个装饰器+有参装饰器
    Python记录10:模块
    Day7
    Day7
    Day7
    Day7
    Day7
    Day7
    Day7
  • 原文地址:https://www.cnblogs.com/losedMemory/p/6336938.html
Copyright © 2020-2023  润新知