为什么要将 NSObject 协议附加到协议实现中

2024-02-22

我看到一些类似于以下内容的代码:

@protocol MyProtocol <NSObject>
// write some methods.
@end

MyProtocol 遵循 NSObject 协议有什么特殊原因吗?如果您执行以下操作,这不是多余的吗:

id <MyProtocol> foo; // foo here conforms to NSObject AND MyProtocol?

只是好奇逻辑是什么。


当你声明一个变量时,比如

 id<MyProtocol> var;

Objective-C 编译器只知道其中的方法MyProtocol因此,如果您尝试调用任何一个,则会产生警告NSObject方法,例如-retain/-release,在这种情况下。因此,Cocoa 定义了一个NSObject镜像的协议NSObject类和实例方法。通过声明MyProtocol实施NSObject协议,你给编译器一个提示,所有的NSObject方法将由实现的实例来实现MyProtocol.

为什么这一切是必要的? Objective-C 允许对象从任何根类派生。在Cocoa中,NSObject是最常见的,但不是唯一的根类。NSProxy例如,也是一个根类。因此类型的实例id才不是一定继承NSObject的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么要将 NSObject 协议附加到协议实现中 的相关文章

随机推荐

  • 如何创建滑动布局,如 Android 主菜单?

    我需要创建一个具有 4 个视图的应用程序 我需要通过触摸并向左或向右移动 无按钮 从一个视图传递到另一个视图 我想要的效果与当您从一个页面传递到另一个页面时在 android 主菜单中导航时看到的效果相同 我已经测试了 ViewFlippe
  • 对瞬态变量注解@Basic

    我有一个 POJO 类 其中包括 持久特性 瞬态特性 在编写 HQL 时 我考虑了两者 持久属性和瞬态属性 IE HQL 类似select persistent properties transient prop from Pojo cla
  • JavaScript 中仅允许数字[重复]

    这个问题在这里已经有答案了 可能的重复 HTML 文本输入仅允许数字输入 https stackoverflow com questions 469357 html text input allow only numeric input 我
  • MySQL Workbench 无法在 Windows 上打开

    我已经下载了 Workbench 的免安装便携式版本 当我运行 exe 文件 在 Windows XP 上 时 没有任何反应 它需要运行一些 MySQL 吗 我认为它是独立的 对吗 我有 MySQL 的 XAMPP 有什么依赖性等吗 您需要
  • Python:tkinter 上的 Z 索引

    是否存在一种方法来指定 Tkinter 画布元素的深度 例如 HTML 的 z index 目前 我发现让元素按照我想要的方式重叠的唯一方法是按特定顺序创建它 问题是某些元素必须在其他元素之后创建 但它们也应该具有较低的 z index 先
  • 重新安装节点后:“找不到模块‘internal/util/types’”

    因此 几个月前我从计算机中删除了节点 我认为主要是 今天我重新安装了它 Node 工作正常 但是当我尝试测试 npm 时 我收到以下消息 npm module js 549 throw err Error Cannot find modul
  • 在 Java 中操作和存储日期的最佳实践是什么? [复制]

    这个问题在这里已经有答案了 操作和存储日期的最佳实践是什么 例如在企业 Java 应用程序中使用 GregorianCalendar 寻求反馈 我会将任何好的答案整合为其他人可以使用的最佳实践 最佳实践通常是准确的NOT考虑重日期对象 但存
  • Spring Security:多个 HTTP 配置不起作用

    我正在尝试使用 Spring Security 并且有一个用例 我希望不同的登录页面和不同的 URL 集得到保护 这是我的配置 Configuration Order 1 public static class ProviderSecuri
  • 如何解决 CALayer 支持的文本中文本渲染不佳的问题

    我有一些可变文本NSTextField呈现在CALayer背景视图 作为一个CALayer不支持其上任何文本的文本渲染的子像素别名 该文本看起来很垃圾 一些谷歌搜索揭示了其原因 并且文本必须渲染到不透明背景上才能启用 SPA 在这种情况下
  • 在 PHP 中发送 HTTP 响应代码的最佳方法

    通过阅读 php 规范和 Stack Overflow 上的其他问题 我可以看到从 PHP 发送 HTTP 响应代码的三种方法 header HTTP 1 0 404 Not Found A B C header false 404 C D
  • JavaScript 有时在 android 的 webview 中不起作用

    我在我的应用程序中放置了一个 webview 来访问包含一些 JavaScript 函数的网页 我的目的是当用户单击网页中的链接时 它将在应用程序中启动一个新的活动 我写了 webSettings setJavaScriptEnabled
  • 如何在实际示例中使用 javascript 模块模式?

    我正在尝试理解 JavaScript 模块模式 我已经看过它应该是什么样子的示例 但我不明白如何使用它 例如 这里发生了一些事情 input share on click function loading html img class re
  • 无论大小如何,如何使项目保持在屏幕中央? [复制]

    这个问题在这里已经有答案了 我试图使这些框在屏幕上水平居中 无论视口的面积是多少 但我似乎无法做到这一点 如果有人可以提供帮助 我将不胜感激 div class jobFields div class field 1 div div cla
  • AngularJS - 触发控制器时获取先前的路线

    Angular 的内部结构再次让我困惑 我需要在加载特定视图时确定之前的路线 我就是这样做的 app controller TrashCtrl function scope rootScope rootScope on locationCh
  • 使用 Winsock 通过单个 UDP 服务器处理 10 个客户端

    我已经使用 UDP 套接字建立了一个服务器 客户端应用程序 但我的服务器无法一次处理多个客户端 现在我想修改我的应用程序 让 10 个客户端分别运行在不同的计算机上 而我的服务器运行在单独的计算机上 我希望我的服务器能够与 10 个不同机器
  • jquery.ui.touch.punch.js 脚本阻止触摸设备上的输入功能

    我花了一点时间 但我发现我无法单击我的输入 因为我使用 touch punch 脚本在触摸设备上启用 jquery UI 拖动功能 熟悉这个脚本的人知道为什么会这样吗 该表单实际上位于父对象的树中 有谁知道我可以覆盖或强制选择的方法吗 我现
  • 如何通过URL获取RouteData?

    我需要得到RoutData通过 ASP NET MVC 应用程序中给定的 URL 字符串 我找到了我需要嘲笑的方式HttpContextBase基于我的 URL 字符串 然后将其传递给RouteTable Routes GetRouteDa
  • IEEE 754 浮点除法的可逆性

    IEEE 754 浮点除法的可逆性是什么 我的意思是标准是否保证如果double y 1 0 x then x 1 0 y i e x可以一点一点精确还原吗 时的情况y is infinity or NaN都是明显的例外 是的 有 IEEE
  • Delphi 6 表单设置为使用 poDesktopCenter 定位自身,最终出现在“扩展”监视器上

    我有一个 Delphi 6 应用程序 它在主窗体出现后启动向导 向导是一种模态形式 我的一位用户将其 Windows 桌面扩展到了多个显示器 在这种情况下 主窗体显示在主监视器上 向导显示在扩展监视器上 这会造成混乱 因为当他们尝试单击主窗
  • 为什么要将 NSObject 协议附加到协议实现中

    我看到一些类似于以下内容的代码 protocol MyProtocol