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

本文详细介绍了Objective-C中的协议(@protocol)和类别的使用方法,包括协议的定义、Class的反射、协议与类别的应用场景以及它们带来的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值