gpt4 book ai didi

iphone - 在 NSObject 上使用非正式协议(protocol)或使用可选方法的协议(protocol)有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 04:21:48 26 4
gpt4 key购买 nike

我正在研究一些关于非正式协议(protocol)和真实协议(protocol)的基础知识。让我感到困惑的是,Cocoa 似乎在 NSObject 上使用了很多非正式协议(protocol)。这些非正式协议(protocol)是 NSObject 上的类别,它们声明方法,但实际上并不实现它们。

据我所知,他们使用非正式协议(protocol)(换句话说,NSObject 上不提供方法实现的类别)的唯一原因是在 Xcode 中提供自动完成提示。

一个例子是 NSNibLoading.h 中定义的 -awakeFromNib 方法,它是 NSObject 上的一个非正式协议(protocol)。 nib 加载系统在运行时检查对象是否实现了该方法。如果是,则调用它。

但现在让我们假设没有称为非正式协议(protocol)的功能。具有完全相同效果的替代方法是真正的@protocol 声明,它声明了一个可选方法 -awakeFromNib。 NSObject 只会采用该协议(protocol),编译器会很乐意提供自动完成功能。

谁能指出这两种策略之间的巨大区别?我看不到非正式协议(protocol)的意义,但真的很想这样做。

最佳答案

两个巨大的不同:

  1. 编译时类型检查。带有可选方法的显式协议(protocol)更清楚您可以实现哪些方法。既可以使用它也遵循的协议(protocol)显式装饰类,Xcode 可以提供更精确的代码完成列表,说明您可以实现的内容。

  2. 它使 NSObject 保持整洁。对于旧式的非正式协议(protocol),所有可选的方法通常都将它们的默认实现添加到 NSObject

自从在 Objective-C 2.0 的协议(protocol)中引入可选方法以来,这个问题不再存在的问题的简洁解决方案。

关于iphone - 在 NSObject 上使用非正式协议(protocol)或使用可选方法的协议(protocol)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4690110/

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