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 }