分类怎么实现非正式协议

在 Objective-C 中,非正式协议、分类和扩展都是用来对类进行扩展的方法,但是它们之间还是有一些区别的。

  1. 非正式协议:非正式协议主要是通过 NSObject 的分类实现的,它声明了一些方法,但并没有实现,需要使用非正式协议的类去实现这些方法。非正式协议的一个主要作用是可以在不改变原有类的情况下,为类添加新的行为。但是,它没有类型检查,容易引发运行时错误。

  2. 分类(Category):分类可以为已存在的类添加新的方法,但不能添加新的实例变量。分类是在运行时加载的,可以覆盖原类的方法。这是一种动态给类添加新功能的方式。

  3. 扩展(Extension):扩展在编译时就已经确定,它是类的一部分,可以添加新的实例变量。扩展可以为类添加新的属性和方法,但不能覆盖原类的方法。扩展通常在类的实现文件中使用,用来私有化一些属性和方法。

总结:非正式协议、分类和扩展都可以给类添加新的方法,但在添加属性、实例变量、覆盖方法等方面有所不同,它们在 Objective-C 中都有各自的使用场景。

在 Objective-C 中,分类(Category)可以用来实现非正式协议。非正式协议是一种不需要正式声明的协议,而是通过将相关方法添加到 NSObject 的分类中来实现的。这样,任何继承自 NSObject 的类都可以选择实现这些方法。

以下是一个简单的例子:

假设我们有一个名为 Printable 的非正式协议,它包含一个名为 print 的方法。我们可以通过在 NSObject 的分类中添加这个方法来实现这个非正式协议:

// NSObject+Printable.h
@interface NSObject (Printable)
- (void)print;
@end

然后,在任何需要实现这个非正式协议的类中,我们可以重写这个方法:

// MyClass.m
#import "NSObject+Printable.h"

@implementation MyClass

- (void)print {
    NSLog(@"Hello, world!");
}

@end

这样,我们的 MyClass 就实现了 Printable 非正式协议中的 print 方法。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值