gpt4 book ai didi

iphone - 类别与非正式协议(protocol)

转载 作者:太空狗 更新时间:2023-10-30 03:56:52 24 4
gpt4 key购买 nike

我想我了解(正式)协议(protocol)和类别之间的区别。现在,如果我没弄错的话,非正式协议(protocol)应该是用于特定目的的类别(通常在 NSObject 上定义)(与正式协议(protocol)不同,可能只提供实现其中列出的一部分方法的机会)。我需要确定一下:谁能确认非正式协议(protocol)只是一个类别(或解释差异)?谢谢。

最佳答案

Category 是类功能的扩展——这是一些方法的实现:

@interface NSObject (MyCategory)
- (void)doSomething;
@end

...

@implementation NSObject (MyCategory)
- (void)doSomething {
// do something...
}
@end

正式协议(protocol)是完全不同的东西。如果您熟悉其他一些面向对象的语言,那么它就像接口(interface)(在 Java、C++、C# 等中)。
协议(protocol)可以像这样附加到任何类实现:

@protocol MyProtocol
@required
- (void)doSomething;
@optional
- (void)doSomethingOptional;
@end

...

@interface MyClass : NSObject <MyProtocol> {
}
@end

...

@implementation MyClass
- (void)doSomething {
// do something...
}
@end

根据文档,非正式协议(protocol)是 NSObject 类的类别(我从未使用过这种方法):

@interface NSObject (MyInformalProtocol)
- (void)doSomething;
@end

...

@implementation NSObject (MyInformalProtocol)
- (void)doSomething {
// do something...
}
@end

关于iphone - 类别与非正式协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2183396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com