iOS开发中id、NSObject *、id、instancetype四者有什么区别?

在使用Objective-C语言进行iOS应用开发的时候,常常会涉及到id、NSObject *、id、instancetype这四个概念的使用,但这四者也是iOS初学者最易混淆的内容,下面小编看了一些iOS开发教程和文档,搜罗了他们的不同用法,分享给大家,一起来看看吧。

1. id与NSObject *

(1)id是Objective-C对象,但是并不一定是NSObject对象,并非所有的Foundation/Cocoa对象都是继承于NSObject对象的,比如NSProxy。同时,id与NSObject对象之间有很多的共同方法,比如retain与release等方法。更一步来说:所有的对象本质来说都是id类型的。

(2)对于id来说,你可以调用任意可见的selector,编译器和IDE,不会进行类型检查,这个时候就需要你自己进行类型检查并且进行类型转换,来确保这些调用不会出错。而对于NSObject *类型,只能调用NSObject对象所声明的selector,不能调用它子类的selector,编译器会进行检查。

(3)对于一些不想或者不能进行类型检查的地方,可以使用id。比如在集合(array, collection)类型中,比如在一些你并不知道方法的返回类型的地方(比如alloc),比如我们经常声明delegate为id类型,在运行的时候再使用respondToSelector:来进行检查。

2.id

使用id来声明一个对象,相当于告诉编译我们并不知道这个对象的类型,但是它实现NSObject protocol。一个这种类型的指针,即可以用来指向NSObject*对象,也可以用来指向NSProxy*对象,因为NSObject对象与NSProxy对象都是现了NSObject protocol。

3. id与instancetype

在instancetype有效的情况下,应该尽量去使用instancetype。至于什么是合适的时候,可以参考stack overflow上面所说:“Use instancetype whenever it‘s appropriate, which is whenever a

class returns an instance of that same class.”,

Apple官方文档:

In your code,replace occurrences of id as a return value with instancetype whereappropriate. This is typically the case for init methods and class factorymethods. Even though the compiler automatically converts methods that beginwith “alloc,” “init,” or “new” and have a return type of id to returninstancetype, it doesn’t convert other methods. Objective-C convention is towrite instancetype explicitly for all methods.

通过上面的介绍,希望对大家以后使用id、NSObject *、id、instancetype有所帮助吧。

相关文章:《Objective-C 开发语言函数编写小技巧

文/小麦麦子(简书作者)
原文链接:http://www.jianshu.com/p/92910741d0d5
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-11-08 22:00:00

iOS开发中id、NSObject *、id、instancetype四者有什么区别?的相关文章

iOS开发中常用的轮子 第四篇 收集齐7个轮子,准备高仿部分微博APP页面

产品原因有几张页面会参考微博APP来做,先收集齐轮子:计划这周完成,然后放到github上开源. 1,微博流刷新: 2,浏览微博中的图片: 3,发布微博: 4,发微博时选择照片: ============分割线:具体如下 ============= 选择相册中图片: 1,UzysAssetsPickerController 链接:https://github.com/uzysjung/UzysAssetsPickerController 介绍:用于替换UIImagePickerControlle

iOS开发中常用的轮子 第四篇 抽屉和侧滑效果

为避免重复造轮子,很多效果和功能都可以从github上找到.清点以前的项目,整理出了很多用过的开源代码,每天奉送一批. 学习例子的方法: 1,了解:运行一遍例子,弄清这些代码的究竟是什么: 2,使用:在之后开发工程中使用这些例子: 3,研究代码:研究例子的代码的实现,简单修改做出自己的效果. 记得要么是facebook,或是twitter第一个使用了个交互效果:而后风靡全球,是产品必用抽屉:再后来就是延生出了各种变形过的效果: 所以,产品经理要你实现抽屉和侧滑效果时,一定要确定到底是什么样抽屉和

iOS开发——淫技篇&iOS开发中各种淫技总结(四)

iOS开发中各种淫技总结(四) 一:@autoclosure将一段代码块活着一句表达式自动的封装成一个闭包 func logIfTrue(predicate: () -> Bool) { if predicate() { print("True") } } 调用 logIfTrue({return 2 > 1}) 简写:logIfTrue{2 > 1} 在predicate加上@autoclosure调用的时候就可以省略{}直接使用logIfTrue(2>1)

iOS开发中UIPopoverController的使用详解

这篇文章主要介绍了iOS开发中UIPopoverController的使用,代码基于传统的Objective-C,需要的朋友可以参考下 一.简单介绍 1.什么是UIPopoverController 是iPad开发中常见的一种控制器(在iPhone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController 它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面 2.使用步骤 要想显示一个UIPopoverController,需要经过下列步骤

iOS开发中KVC、KVO简介

在iOS开发中,KVC和KVO是经常被用到的.可以使用KVC对对象的属性赋值和取得对象的属性值,可以使用KVO监听对象属性值的变化.简单介绍一下KVC和KVO. 一:键值编码(KVC) KVC,全称 Key Value Coding(键值编码),是OC 语言的一个特性,使用KVC,可以对对象的属性进行动态读写. KVC的操作方法由 NSKeyValueCoding协议提供,而NSObject已经实现了这个协议,因此OC中的几乎所有对象都可以使用KVC操作.常用的KVC操作方法有: (1)设置属性

ios学习笔记之block在ios开发中的应用

一.什么是Blocks      Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block. 二.在ios开发中,什么情况下使用Block      Block除了能够定义参数列表.返回类型外,还能够获取被定义时的词法范围内的状态(比如局部变量),并且在一定条件下(比如使用__block变量)能够修改这些状态.此外,这些可修改的状态在相同词法范围内的多个block之间是共享的,即便出了该词法范围

iOS开发中标签控制器的使用——UITabBarController

正文 iOS开发中标签控制器的使用——UITabBarController 一.引言 与导航控制器相类似,标签控制器也是用于管理视图控制器的一个UI控件,在其内部封装了一个标签栏,与导航不同的是,导航的管理方式是纵向的,采用push与pop切换控制器,标签的管理是横向的,通过标签的切换来改变控制器,一般我们习惯将tabBar作为应用程序的根视图控制器,在其中添加导航,导航中在对ViewController进行管理. 二.创建一个标签控制器 通过如下的步骤,我们可以很简便的创建一个TabBarCo

IOS开发中数据持久化的几种方法--NSUserDefaults

IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefault是最简单直接的一个办法: 1)保存数据: 1 // 实例化一个NSUserDefaults单例对象 2 NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; 3 // 把一个数组array保存在key为allContact的键值

文顶顶 iOS开发UI篇—IOS开发中Xcode的一些使用技巧

iOS开发UI篇—IOS开发中Xcode的一些使用技巧 一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n     新建项目 cmd + n             新建文件 视图 option + cmd + 回车 打开助理编辑器 cmd + 回车           显示主窗口 cmd + 0             导航窗口 option + cmd + 0    工具窗口 在.m & .h之间切换           control + cmd + 上/下 按

iOS开发UI基础—IOS开发中Xcode的一些使用技巧

iOS开发UI基础-IOS开发中Xcode的一些使用技巧 一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n     新建项目 cmd + n             新建文件 视图 option + cmd + 回车 打开助理编辑器 cmd + 回车           显示主窗口 cmd + 0             导航窗口 option + cmd + 0    工具窗口 在.m & .h之间切换           control + cmd + 上/下