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

Posted ReShadow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

 

以上是关于OC中NSClassFromString()与NSStringFromClass()的用法及应用场景的主要内容,如果未能解决你的问题,请参考以下文章

OC -- NSCalendar的使用 与OC的反射

根据字符串生成类---类的类型.self---根据字符串创建控制器对象

由 NSClassFromString 产生的类与头文件中定义的类不相关

Oc中的数组

38-oc常用结构体

如何将此 NSClassFromString 代码转换为 Swift?