zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    PowerDesigner将PDM导出生成WORD文档
    wrong number of arguments,java方法反射时数组参数的坑
    页面关键词Meta Keywords和描述Description的优化作用
    Java RMI之HelloWorld篇
    WebService另一种轻量级实现—Hessian 学习笔记
    RMI、Hessian、Burlap、Httpinvoker、WebService的比较
    利用Hessian如何实现Webservice
    什么是反射?反射有什么用处
    java string,需要进行首字母大写改写
    解决版本冲突-使用SVN主干与分支功能
  • 原文地址:https://www.cnblogs.com/losedMemory/p/6336938.html
Copyright © 2011-2022 走看看