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 }

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

时间: 2024-10-28 14:22:55

OC中NSClassFromString()与NSStringFromClass()的用法及应用场景的相关文章

OC中协议的概念以及用法

OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习Java中的接口时候,看可以知道其实接口就相当于一种契约(协议),给他的实现类打上标记了,当然这个活在Java5.0之后,被注解替代了,因为注解就是为了此功能诞生的.协议就是定义了一组方法,然后让其他类去实现 下面来看代码:WithProtocol.h[objc]  view plaincopy 

关于oc中出现的typedef的用法/定义函数指针

typedef int (^calculateBlock)(int a,int b); 这里面typedef的作用只是给 calculateBlock取了一个 别名,说明以后可以直接使用. calculateBlock类似于*所以可以有类似的用法,以后可以直接使用calculateBlock来定义方法.例: - (int)calculateWithNumber1:(int)number1 andNumber:(int)number2 andCalculate:(calculateBlock)ca

OC中extern,static,const的用法

1.const的作用: const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p). 例如 NSString *const SIAlertViewWillDismissNotification;修饰的是SIAlertViewWillDismissNotification 被const修饰的变量是只读的 2.static的作用: 修饰局部变量: 1.延长局部变量的生命周期,程序结束才会销毁. 2.局部变量只会生成一份内存,只会初始化一次. 3.改变局部变量的作用域. 修饰全局变量 1.只能在

关于void*类型的用法(相当于OC中的id类型)

关于void*类型的用法(相当于OC中的id类型) 1.C++语言在对于void* 类型的使用很特别,因为void* 可以间接引用任何其他数据类型的指针,比如int*.float*甚至抽象数据类型的指针,而且可以从void* 强制转换为任何其他数据类型的指针,所以使用起来有时候会比较危险.如果开始将一个void*的指针间接引用一个float*的指针,然后将这个void*指针强制转化为一个int*类型的指针,编译器不会给出错误甚至警告,但是输出的数据却匪夷所思,如果再强制转换会float*则不会出

OC中self的用法

self :用法 OC中self可代表类和对象 Self是一个指针,谁调用了当前方法,self就指向谁 [出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类] Self的用途: (1)可以利用self->成员变量名访问当前对象内部的成员变量(仅在对象方法中) (2)[self 方法名]:可以调用其他的对象方法或者是类方法

OC中description、 SEL、类本质、self和super用法

一:description方法 description有对象方法和类方法两种,(是NSObject类的方法) 1,-description(对象方法) 使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出.(系统会自动调用打印对象的description方法) 而如果打印NSString对象的话,默认返回的就是NSString字符串 2,+description (类方法) 使用NSLog和@%输出某个类时,会调用类的description类方法,并拿

OC中的NSArray和NSMutableArray、NSDictionary和NSMutableDictionary用法

一:NSArray 和NSMutableArray 1: NSArray:不可变数组 NSArray是OC中使用的数组,只能用来存放OC对象,不能存放非OC对象如基本数据类型 它使不可变的,一旦初始化完毕,内容不能改变,也不能添加元素. 而C语言中的数组只能存放一种数据类型 (1) 普通数组的用法 // 普通数组的创建 // int arr[5] = {1,3,4}; // 对象数组的创建 // Person *p = [[Person alloc] init]; // Person *arrP

OC中NSFileManager类 和 copy一些用法

一:NSFileManager的使用 1, 概念:用来管理文件系统,它可以用来进行常见的文件\文件夹的操作(拷贝.剪切.创建等) NSFileManager 使用了单例模式singleton 使用defaultManager方法可以获取那个单例对象 2, 1>常见判断 //1,判断文件或文件夹是否存放 // NSFileManager *fileManager = [NSFileManager defaultManager]; // NSString *path = @"/Users/ll

NS前缀\OC中的注释\访问OC原文件、C原文件中的函数

///////////////////////////////////////// //////////////////////////////////////// NS前缀 NS来自于NeXTStep的一个软件 NeXT Software OC中不支持命名空间(namespace) NS是为了避免命名冲突而给的前缀 看到NS前缀就知道是Cocoa中的系统类的名称 "@"的使用方法 1.@""这个符号表示将C中的字符串转化为OC中的字符串对象 2.@符号 OC中的大