iOS中id与instancetype的区别

这篇具有很好参考价值的文章主要介绍了iOS中id与instancetype的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关联返回类型与非关联返回类型

  • 关联性返回类型

根据Cocoa的命名规则,满足下述规则的方法:
(1)类方法中,以alloc或new开头
(2)实例方法中,以autorelease,init,retain或self开头
会返回一个方法所在类类型的对象,这些方法就被称为是关联返回类型的方法。换句话说,这些方法的返回结果以方法所在的类为类型。

例如:

@interface NSObject  
+ (id)alloc;  
- (id)init;  
@end

[NSArray alloc]与[[NSArray alloc]init]返回的都为NSArray的对象。

  • 非关联返回类型
@interface NSArray  
+ (id)constructAnArray;  
@end


[NSArray constructAnArray];

根据Cocoa的方法命名规范,得到的返回类型就和方法声明的返回类型一样,是id。

但是如果使用instancetype作为返回类型,如下:

@interface NSArray  
+ (instancetype)constructAnArray;  
@end
/

[NSArray constructAnArray];

此时返回类型和方法所在类型相同。

instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!

两者之间的区别

  • id在编译的时候不能判断对象的真是类型

    instancetype在编译的时候可以判断对象的真是类型。

  • 如果init方法的返回值是instancetype,那么将返回值赋值给一个其他的对象汇报一个警告。

    如果是在以前, init的返回值是id,那么将init返回的对象地址赋值给其它对象是不会报错的

  • id可以用作定义变量,也可做返回值,也可以作为形参传入。但是instancetype只能作为返回值。文章来源地址https://www.toymoban.com/news/detail-655240.html

到了这里,关于iOS中id与instancetype的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 和 IOS 设备唯一ID如何选择

            我们在做Android/IOS应用或游戏的时候,或许总会碰到要获取设备唯一id来标识或跟踪玩家。但随着系统安全性的提高,加强用户的隐私安全,获取设备唯一ID变得越来越困难了,下面我们来分析一下,看看哪些还可以满足我们需求,同时,如果您有关于获取设备唯一

    2024年01月19日
    浏览(28)
  • 【Linux后端服务器开发】基础IO与文件系统

    目录 一、基础IO 1. C语言文件读写 2. 标志位传参 3. C语言与系统调用关系 二、文件系统 1. 文件描述符 2. 输入输出重定向 文件调用 库函数接口: fopen、fclose、fwrite、fread、fseek 系统调用接口:open、close、write、read、lseek r/w/a :读/写/追加 若打开的文件不存在,“r”报错,“

    2024年02月15日
    浏览(54)
  • iOS问题记录 - type argument ‘nw_proxy_config_t‘ is neither an Objective-C object nor a block type

    升级Xcode 15后,意料之中,项目又遇到了问题。 Xcode: 15.0 CocoaPods: 1.12.1 flutter_inappwebview: 6.0.0-beta.24+1 Flutter项目在Xcode 15上编译时报错: 从报错信息看,是因为 nw_proxy_config_t 的类型不对导致的,错误发生在 flutter_inappwebview 库用到的 WebKit.framework 中,初步猜测可能是有什么新的

    2024年02月08日
    浏览(33)
  • 算法、语言混编、分布式锁与分布式ID、IO模型

    数据结构和算法是程序的基石。我们使用的所有数据类型就是一种数据结构(数据的组织形式),写的程序逻辑就是算法。 算法是指用来操作数据、解决程序问题的一组方法。 对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源(空间

    2024年02月08日
    浏览(35)
  • iOS 系统获取 Bundle ID、平台公钥、签名 MD5 值的指引

    1. 获取 Bundle ID:使用 APP 对应的 IOS 开发者账号登录 Developer 控制台,找到下图 标识符(英文) ,单击进入 Certificates,IdentifiersProfiles 页面。 2. 在 Certificates,IdentifiersProfiles 页面,单击 Identifiers ,其中 IDENTIFIER 列 对应的就是 Bundle ID 。如下图所示: 3. 获取公钥与签名 SHA1 值:

    2024年02月05日
    浏览(32)
  • 【Java基础教程】(四十四)IO篇 · 上:File类、字节流与字符流,分析字节输出流、字节输入流、字符输出流和字符输入流的区别~

    掌握 java.io包中类的继承关系 ; 掌握 File类的使用,并且可以通过File类进行文件的创建、删除以及文件夹的列表等操作; 掌握字节流或字符流操作文件内容,字节流与字符流的区别; 在 java.io 包中,如果要进行文件自身的操作 (例如:创建、删除等), 只能依靠 java.io.File 类完

    2024年02月15日
    浏览(25)
  • 面试题:简单说一下阻塞IO、非阻塞IO、IO复用的区别 ?

    在《Unix网络编程》一书中提到了五种IO模型,分别是:阻塞IO、非阻塞IO、IO复用、信号驱动IO以及异步IO。本篇文章主要介绍IO的基本概念以及阻塞IO、非阻塞IO、IO复用三种模型,供大家参考学习。 计算机视角理解IO: 对于计算机而言,任何涉及到计算机核心(CPU和内存)与其

    2024年01月22日
    浏览(30)
  • ios_base::out和ios::out、ios_base::in和ios::in、ios_base::app和ios::app等之间有什么区别吗?

    2023年8月2日,周三晚上 今天我看到了这样的两行代码: 这让我产生了几个疑问: 为什么有时候用ios_base::out,有时候用ios::out? ios_base::out和ios::out之间有区别吗? 我花了一两个小时才搞清楚.... 目录 结论 ios_base类的 I/O 流控制标志有哪些 ios类的 I/O 流控制标志有哪些 证明它

    2024年02月14日
    浏览(26)
  • 【iOS】Frame与Bounds的区别详解

    iOS特有的坐标是,是在iOS坐标系的左上角为坐标原点,往右为X正方向,向下为Y正方向。 bounds 和 frame 都是属于 CGRect 类型的结构体,系统的定义如下, 包含一个CGPoint(起点)和一个CGSize(尺寸)子结构体。 origin决定了View每个view的起点,size决定view的尺寸。 frame是每个view必

    2024年02月15日
    浏览(27)
  • Java基础--->IO流(1)【IO基础】

    Java中的IO是一种用于读写文件、网络连接数据等功能的I/O(输入/输出)系统。它主要由java.io包提供,并且功能丰富,支持各种文件格式和网络协议。 在Java中,可以使用字节流和字符流来读写数据。字节流以字节为单位读写数据,而字符流以字符为单位读写数据,并且支持

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包