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 }