单例的实例类型与类名?

2023-12-23

据我了解,instancetype向编译器声明该方法的返回类型与接收消息的类相同。

传统上,我总是声明我的单例初始值设定项,并将类名显式设置为返回类型:

@interface MyClass : NSObject
+ (MyClass *)sharedInstance;
@end

现在我想知道是否应该使用实例类型,如下所示:

@interface MyClass : NSObject
+ (instancetype)sharedInstance;
@end   

最终结果是一样的,我只是想知道是否有理由在这里使用其中之一?


instancetype对于涉及继承的情况很有用。考虑一下你有课A它继承自类B。中的一种方法B它返回一个实例B可以先前声明为id,其覆盖在A可能会返回一个实例A- 这一切都很好,但编译器没有任何线索。但是,通过使用实例类型,编译器会被告知,当调用实例类型时A该方法返回一个实例A实例,因此可以提供更好的诊断、代码完成等。

现在在你的例子中你已经使用了MyClass *而不是id,所以你已经告诉编译器类型。你还有一个共享实例模型(不是单例像其他实例一样建模MyClass),您是否可能定义另一个继承自的类MyClass并覆盖sharedInstance方法?可能不会,但如果你这样做instancetype可能有用,否则一无所获。

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

单例的实例类型与类名? 的相关文章

随机推荐

  • 通过在 Maven 中运行项目的 java 类来生成源

    我正在将一个较大的 Ant 构建转换为 Maven 作为 Ant 构建的一部分 我们有几个步骤通过调用项目的类之一来创建 Java 类 简化为 javac SomeGenerator java java SomeGenerator gene
  • 硒和 iframe

    我有一个 iframe 当我单击页面上的选项卡时会加载该 iframe 当我使用 Firebug 查看 IE8 上的 iframe 时 我看到的是 iframe id tabContextFrame class contextFrame c
  • Docker如何传递相对路径作为参数

    我想运行这个命令 docker run docker mup deploy config deploy mup js where docker mup是图像的名称 并且deploy config deploy mup js是参数 我的问题
  • 使用 Active Directory 或成员数据库进行 MVC 4 身份验证

    我正在构建一个可以通过两种方式访问 的网络应用程序 与我在同一组织工作的每个人都可以使用我们的活动目录来访问该应用程序 来自外部的每个人都应该通过单独的会员数据库加入该应用程序 每个人都应该在会员数据库中拥有一个包含其角色的帐户 因此广告连
  • 登录自定义路由被身份验证拒绝

    Router scope club slug function routes routes gt connect login controller gt Users action gt login 所以当我尝试访问时http example
  • 为什么我无法正确打印第 47 个斐波那契数?

    我使用的是 64 位操作系统 因此我也无法正确打印第 46 个斐波那契数 该数小于 40 亿 include
  • 什么是反向路由?

    确实 它到处都被提及 但甚至没有维基百科页面准确命名 这只是 URL 重定向的一个奇特名称吗 它还有其他名称或定义吗 反向路由是生成指向路由的 URL 的过程 给定路由的符号引用 可以是路由 视图 控制器的名称或对控制器的引用 具体取决于框
  • 如何在Tcl中安装软件包?

    我正在尝试安装critlib在我的机器上 http equi4 com critlib http equi4 com critlib 这样我就可以在 Tcl 中动态创建 zip 文件 问题是我不知道如何安装 Tcl 软件包 您是否有放置文件
  • 在 IIS7 静态内容集成模式中使用角色进行 ASP.NET 身份验证

    我正在试验IIS7中静态内容的集成身份验证模式 我按照本文中的说明进行操作 https web archive org web 20210612113955 https aspnet 4guysfromrolla com articles
  • BeautifulSoup 选择具有特定类的某些元素中的所有 href

    我正在尝试从中删除图像网站 我尝试使用 Scrapy 使用 Docker 和 scrapy slenium Scrapy 似乎不适用于 windows10 home 所以我现在尝试使用 Selenium Beautifulsoup 我正在将
  • 模板类中的 C++ 非模板方法

    是否可以在 cpp 文件的模板类 结构 中编写非模板方法的实现 我读到模板方法应该写在 h上 但我的方法不是模板方法 尽管它属于模板类 这是我的 h 中的代码 include
  • BottomNavigationView 在片段事务上滞后

    问题 我正在使用BottomNavigationView来自我的一项活动的 Android 设计支持库 以及每个导航项的片段 每次我在栏上选择一个项目时 我都会执行一个片段事务 如下面的代码片段 为了简洁起见 删除了代码的某些部分 priv
  • Callkit - 如果从后台开始通话则没有音频

    从 iOS 13 3 1 开始出现这种情况 在我的应用程序中 我使用 Callkit WebRTC 建立 VOIP 连接 我总是能够毫无问题地建立连接 但是 从 13 3 1 开始 如果应用程序不在前台 我将无法启动 Callkit 调用
  • 来自特定网卡的 UDP 多播

    我正在寻找一些网络专家来帮助我解决问题 我有很多计算机运行我的软件 该软件使用 UDP 多播 如果计算机仅连接到一个网络 网络 A 则此方法可以正常工作 我的计算机 也运行上述软件 将在端口 XXXX 上侦听多播 这台计算机有两个网卡 当我
  • 如何缓存 Spring Data JPA 投影

    我正在使用 Spring Data JPA 存储库运行 Spring Boot 1 5 1 我已经在我的用户存储库中添加了一个方法 该方法使用 JPA 投影 UserProfile 效果很好 我现在希望在我的服务层中缓存该方法的结果 该层应
  • 从 Apache Spark 中的架构获取数据类型列表

    我在 Spark Python 中有以下代码 用于从 DataFrame 的架构中获取名称列表 该代码工作正常 但如何获取数据类型列表 columnNames df schema names 例如 类似 columnTypes df sch
  • 使用 NAudio 在 C# 中播放 ohLibSpotify pcm 数据流

    我正在尝试播放从 ohLibSpotify c 库提供的原始 pcm 数据 https github com openhome ohLibSpotify https github com openhome ohLibSpotify 我在以下
  • extjs:如何在列渲染器中使用ajax调用?

    我现在得到的是这样的 renderer function value var ret var conn new Ext data Connection conn request method POST url rsdBackend para
  • SOAP XML WS-Security 签名验证

    我能够使用 WS Security 签名的证书来签署 SOAP XML 但我无法验证其签名 验证签名时会导致异常 我们将不胜感激 希望提供一些帮助来解决该问题 SOAP 封装的 WS Security 签名 https docs oracl
  • 单例的实例类型与类名?

    据我了解 instancetype向编译器声明该方法的返回类型与接收消息的类相同 传统上 我总是声明我的单例初始值设定项 并将类名显式设置为返回类型 interface MyClass NSObject MyClass sharedInst