标签:
协议(@protocol):相当于java的接口
协议的方法不一定要实现,可以使用@required和@optional来设置,默认为@required(ob为弱语法,即使不实现必选方法编译运行也不会报错)
Class的反射
常用方法
Class 变量名 = [类或者对象 class];
Class 变量名 = [类或者对象 superclass];
Class 变量名 = NSClassFromString(方法名字的字符串);
NSString *变量名 = NSStringFromClass(Class类型参数);
通过类名的字符串形式实例化对象
Class class = NSClassFromString(@"Student"); id obj = [[class alloc]init]; NSLog(@"创建的对象为:%@",obj)
NSObject中提供的自省方法
-(BOOL)isKindOfClass:(Class)aClass 判断对象是不是属于指定类型或其子类
-(BOOL)isMemberOfClass:(Class)aClass 判断对象是不是属于指定类型
-(BOOL)isSubclassOfClass:(Class)aClass 判断对象是不是属于指定类型的子类
-(BOOL)conformsToProtocol:(Protocol *)aProtocol 判断某个类/对象是否实现某个协议(参数使用@protocol(MyProtocol)传入)
类别(Category):为现有的类添加新方法的方式
类别的类别声明
@interface ClassName(CategoryName)
-(void)addMethod;
@end
类别实现
#import"ClassName+CategoryName.h"
@implementation ClassName(CategoryName)
-(void)addMethod {
//添加方法实现的代码;
}
@end
类别的好处
想对框架提供的类进行扩展(没有源码)
不想生成一个新的子类的情况下,比如对NSArray的扩展
方便做项目管理,可以将一份源码(未扩展的类)在多个地方共享,多人协作开发
对系统框架进行无缝扩充
标签:
原文地址:http://www.cnblogs.com/aY-Wonder/p/4579919.html