您的位置:首页 > 移动开发 > Objective-C

< Objective-C >协议,反射和类别

2020-02-15 10:19 337 查看

协议(@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的扩展

方便做项目管理,可以将一份源码(未扩展的类)在多个地方共享,多人协作开发

对系统框架进行无缝扩充

 

转载于:https://www.cnblogs.com/aY-Wonder/p/4579919.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
b58548492614729 发布了0 篇原创文章 · 获赞 0 · 访问量 47 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: