NSClassFromString,NSSelectorFromString,isKingOfClass
2014-02-17 22:28
489 查看
1. NSClassFromString
这个方法判断类是否存在,如果存在就动态加载的,不存为就返回一个空对象;
id myObj = [[NSClassFromString(@"MySpecialClass") alloc] init];
正常情况下等价于:id myObj = [[MySpecialClass alloc] init];
但是,如果你的程序中并不存在MySpecialClass这个类,下面的写法会出错,而上面的写法只是返回一个空对象而已。
因此,在某些情况下,可以使用NSClassFromString来进行你不确定的类的初始化。
比如在iPhone中,NSTask可能就会出现这种情况,所以在你需要使用NSTask时,最好使用:
[[NSClassFromString(@"NSTask") .....]]
而不要直接使用[NSTask ...]这种写法。
NSClassFromString的好处是:
1, 弱化连接,因此并不会把没有的Framework也link到程序中。
2,不需要使用import,因为类是动态加载的,只要存在就可以加载。因此如果你的toolchain中没有某个类的头文件定义,而你确信这个类是可以用的,那么也可以用这种方法。
2. NSSelectorFromString
这个方法是上个方法的补充,也是动态加载实例方法。
SEL sel = NSSelectorFromString(@"doSomethingMethod:")//注意这个冒号,说明方法带有参数
if([object respondsToSelector:sel]) {
[object performSelector:sel withObject:color]; //注意如果有两个参数,使用两个withObject:参数;
}
3. isKindOfClass
isKindOfClass 我们也可以使用isKindOfClass来检查一个对象是否是一个类的成员
4. isMemberOfClass
isMemberOfClass方法是来确定对象是否是某一个类的成员
5. initWithCoder和initWithFrame的区别 initWithCoder是一个类在IB中创建但在xocdde中被实例化时被调用的.比如,通过IB创建一个controller的nib文件,然后在xocde中通过initWithNibName来实例化这个controller,那么这个controller的initWithCoder会被调用.
initWithFrame是由用户创建的UIView子类,实例时被调用
这个方法判断类是否存在,如果存在就动态加载的,不存为就返回一个空对象;
id myObj = [[NSClassFromString(@"MySpecialClass") alloc] init];
正常情况下等价于:id myObj = [[MySpecialClass alloc] init];
但是,如果你的程序中并不存在MySpecialClass这个类,下面的写法会出错,而上面的写法只是返回一个空对象而已。
因此,在某些情况下,可以使用NSClassFromString来进行你不确定的类的初始化。
比如在iPhone中,NSTask可能就会出现这种情况,所以在你需要使用NSTask时,最好使用:
[[NSClassFromString(@"NSTask") .....]]
而不要直接使用[NSTask ...]这种写法。
NSClassFromString的好处是:
1, 弱化连接,因此并不会把没有的Framework也link到程序中。
2,不需要使用import,因为类是动态加载的,只要存在就可以加载。因此如果你的toolchain中没有某个类的头文件定义,而你确信这个类是可以用的,那么也可以用这种方法。
2. NSSelectorFromString
这个方法是上个方法的补充,也是动态加载实例方法。
SEL sel = NSSelectorFromString(@"doSomethingMethod:")//注意这个冒号,说明方法带有参数
if([object respondsToSelector:sel]) {
[object performSelector:sel withObject:color]; //注意如果有两个参数,使用两个withObject:参数;
}
3. isKindOfClass
isKindOfClass 我们也可以使用isKindOfClass来检查一个对象是否是一个类的成员
4. isMemberOfClass
isMemberOfClass方法是来确定对象是否是某一个类的成员
5. initWithCoder和initWithFrame的区别 initWithCoder是一个类在IB中创建但在xocdde中被实例化时被调用的.比如,通过IB创建一个controller的nib文件,然后在xocde中通过initWithNibName来实例化这个controller,那么这个controller的initWithCoder会被调用.
initWithFrame是由用户创建的UIView子类,实例时被调用
相关文章推荐
- NSClassFromString,NSSelectorFromString,isKingOfClass
- NSClassFromString,NSSelectorFromString,isKingOfClass
- iOS开发- NSClassFromString,NSSelectorFromString,isKingOfClass
- iOS NSClassFromString,NSSelectorFromString,isKingOfClass
- NSClassFromString,NSSelectorFromString,isKingOfClass
- iOS NSClassFromString,NSSelectorFromString,isKingOfClass
- NSClassFromString,NSSelectorFromString,isKingOfClass
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等NSClassFromString
- iOS NSClassFromString, NSSelectorFromString, isKingOfClass
- NSClassFromString isKindOfClass
- 随笔-NSClassFromString isKindOfClass
- 【iOS开发系列】NSClassFromString、NSSelectorFromString、isKindOfClass、isMemberOfClass
- ReactJs 报错 Element type is invalid: expected a string (from built-in components) or a class/function (for composite components) but got: undefined. Check the render method of `Me`.
- NSString NSCFString isMemberOfClass 遇到的相关的问题
- [iPhone][cocoa] NSClassFromString 和 NSSelectorFromString
- Find the substring of length 3 which is present in the reverse order from the string
- NSClassFromString通过classString构造class然后实例化一个对象
- Question 30: What is the order of destructor calls for an object of class Y inherited from class X that has an object of class A
- Class.isAssignableFrom instanceof 区别
- 通过文件名利用NSClassFromString, 取到Class类别,通过setValue:forKey:传递值