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 }
  • 相关阅读:
    MySQL主从复制-指定数据库复制
    linux下如何添加一个用户并且让用户获得root权限
    vim加密文件
    nginx_upstream_check_module-master对nginx的后端机器进行健康状态检查报403错误【转】
    Nginx配置SSL证书部署HTTPS网站
    MySQL数据备份之mysqldump使用
    nginx location语法使用说明
    Linux 使用 iptables屏蔽IP段
    nginx中获取真实ip
    在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解
  • 原文地址:https://www.cnblogs.com/losedMemory/p/6336938.html
Copyright © 2011-2022 走看看