首页 > 代码库 > OC中NSClassFromString()与NSStringFromClass()的用法及应用场景

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 }

 

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Menlo; color: #3495af } span.s1 { }</style> <style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Menlo; color: #3495af } span.s1 { }</style>

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