category、block、protocol、SEL

本文深入探讨了Objective-C中的四大核心概念:category、block、protocol和SEL。详细讲解了它们的作用、使用规范及注意事项,帮助开发者更好地掌握这些高级特性。

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

category、block、protocol、SEL


category

作用:扩充一个类的功能

命名规范:  类名+分类名

优点:降低类间的耦合性(继承拥有高耦合性)

在分类中:

1.可以通过self使用主类中的其它方法。

2.只要在原类中声明的实例变量,都可以在分类中直接访问。

3.不可以声明实例变量。


注意:

1.若分类中的方法名与主类中的方法相同,原类中的方法相当于被覆盖了。

2.若多个分类中有多个方法的方法名相同,会调用最后被编译的分类文件中的方法。


block

块是一种数据类型,不是指针。

优点:block弥补了函数指针不能够直接保存一个函数体的缺憾。

int (^ sumBlock)(int a, int b)

= ^int(int a, int b){//statements;};


可以将block与typedef结合,以便简化使用

例如:

使用下列定义后

typedef int (^sumBlock)(int a, int b)

可以直接使用 sumBlock 


块的用途:

1.封装变化

例如:在开发中,若有一个方法有多种算法可以实现时,可以将其最后一个形参设置为block,由此在每次使用此方法的时候,可以传入不同的算法,提高代码的重用性。

2.提高效率


PS:若想在block中改变外部变量的值,外部变量需要使用__block修饰符修饰(很少用)


Protocol


基本格式:

@protocol

@required //必须实现(有警告)

@optional //可选实现(没有警告)

@end


用途:

1.代理设计


私有协议:如果仅想自身遵循一些协议(其他类不遵循),直接写在类的.m文件中。

如果想定义一些属性或变量必须遵循某些协议,那么可以在定义的属性或变量后面直接使用<>来强调所需遵循的协议。

例如:

id<UITableViewDataSource> delegate;//必须遵循数据源代理协议


SEL

SEL数据类型是用来包装方法的。

OC中的消息机制:

1.向指定对象发送消息。

2.将消息通过@selector包装成SEL数据类型。

3.通过指定对象的isa,匹配相应的方法并使用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值