【OC】类的延展Extendsion

延展类别又称为扩展(Extendsion)
ExtensionCategory的一个特例其名字为匿名(为空),并且新添加的方法一定要予以实现。(Category没有这个限制)

@interface MyClass () { //类扩展 float value;
}
- (void)setValue:(float)newValue;
@end

这种写法的类别叫匿名类别,又叫类扩展,所谓的扩展,其实就是为一个类添加额外的原来没有的变量、方法或者合成属性。


延展的三种实现方式:

方式一:

通过延展来实现方法的私有,延展的头文件独立。这种方法不能实现真正的方法私有,当在别的文件中引入延展的头文件,那么在这个文件中定义的类的对象就可以直接调用在延展中定义所谓私有的方法

// 对类的延展 - 隐藏方法 wrap的一种手段(非强制) .h文件
@interface SceneManager ()
+ (void) wrap;
@end
.m类的实现文件中 @implementation SceneManager + (void) wrap {
NSLog(@"method of wrap"); }
@end
调用
[SceneManager wrap];
// 这里会抱一个警告:Class method of "+ wrap" not found
// 不过虽然是警告,不过运行是正常的,不过这么写在自我规范上不好,即使编译器没有做强制 限制,我们自己也要限制自己。
// 不然,延展方法就毫无意义可言。

方式二:

第二种实现延展的方式是延展没有独立的头文件,在类的实现文件.m中声明和实现延展,这种方法可以很好的实现方法的私有,因为在OC中是不能引入.m的文件的

.m文件
@interface SceneManager ()
+ (void) wrap;
@end
@implementation SceneManager + (void) wrap {
NSLog(@"method of wrap"); }
@end
调用
[SceneManager wrap];


方式三:

第三种实现方法私有的方式是在.m文件中得@implementation中直接实现在@interface中没有声明的方法,这样也可以很好的实现方法的私有。


分类(Category与类扩展(Extendsion)的区别:

Category有很多种翻译: 分类 \ 类别 \ 类目 (一般叫分类)


1.分类(Category中只能增加方法

2.类扩展(Extendsion不仅可以增加方法,还可以增加实例变量(或者合成属性),只是该实例变量默认是私有类型的(作用范围只能在自身类,而不是子类或其他地方)

3.类扩展(Extendsion中声明的方法没被实现,编译器会报警,但是分类(Category中的方法没被实现编译器是不会有任何警告的。这是因为类扩展(Extendsion是在编译阶段被添加到类中,而分类(Category是在运行时添加到类中

4.类扩展(Extendsion不能像类别那样拥有独立的实现部分(@implementation部分),也就是说,类扩展所声明的方法必须依托对应类的实现(.m文件)部分来实现。
5.义在 .m 文件中的类扩展方法为私有的,定义在 .h 文件(头文件)中的类扩展方法为公有的。类扩展是在 .m 文件中声明私有方法的非常好的方式。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OC(Objective-C)是一种面向对象的编程语言,它支持在中使用方法和block。方法是在中定义的方法,可以直接通过名来调用,而不需要实例化对象。而block是一种闭包,可以在代码中定义并传递给方法或函数,用于延迟执行特定的逻辑。 在OC中,可以使用方法来创建和操作的实例,例如通过一个工厂方法创建对象,或者在方法中实现一些与相关的逻辑。方法通常使用“+”符号进行声明和实现。 而block可以在方法中作为参数传递,也可以在方法中定义和使用。block可以捕获其所在作用域的变量,可以在方法内部延迟执行一段代码,也可以用于实现回调等功能。block的定义和使用使用“^(){}”语法。 方法和block可以结合使用,例如可以在方法中接受一个block作为参数,并在合适的时机调用该block,以实现一些灵活的逻辑。通过方法和block的组合,可以在OC中实现更加灵活和强大的功能,例如在异步操作中使用block来回调结果,或者在工厂方法中使用block来定制对象的初始化逻辑等。 总而言之,方法和block是OC中的两个重要特性,它们可以分别用于的操作和延迟执行逻辑,也可以结合使用以实现更加灵活的功能。在实际的OC开发中,方法和block通常会被广泛使用,可以帮助开发者更加简洁和灵活地实现代码逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zok93

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值