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 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM