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

作者&投稿:高项 (若有异议请与网页底部的电邮联系)
ios中id与NSObject* 和id<NSObject>有什么区别?~

只要稍微留意他们的定义你会能看出来区别我写了篇博客,供你参考: http://www.devdiv.com/ios_id_nsobject_id_lt_nsobject_gt_-blog-1-50764.html


在使用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有所帮助吧。

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


苹果设备被app封了怎么办?
android.os.Build.FINGERPRINT:设备的唯一标识。由设备的多个信息拼接合成。android.os.Build.HARDWARE:设备硬件名称,一般和基板名称一样(BOARD)android.os.Build.HOST:设备主机地址 android.os.Build.ID:设备版本号。android.os.Build.MODEL :获取手机的型号 设备名称。如:SM-N9100(三星Note4)andr...

2024最新Android设备UUID\/UDID使用指南
这两点可能会对广告联盟等产生影响,因此建议使用Advertising ID。Appuploader【目前主要推荐的 Appuploader 是一个辅助工具,可以在 macOS 或 Windows 平台上进行证书制作、描述文件制作、APP提交、安装测试等操作。它为跨平台 APP 开发者提供了便利的上架流程,并简化了 iOS APP 上架的步骤。5. 其他方法 ...

android开发中 关于R.id的问题
代码中setContentView(R.layout.main)作用是设置界面布局,并设置了该Activity的关联视图集根;Button button=(Button)findViewById(R.id.button);从视图集根遍历找到id为button的视图,所以,我们先要进行布局的安排。在res\/layout文件夹下创建main.xml,代码如下,当然随便布局:<LinearLayout xmlns:android...

N:s回nlot 误服id 务户了程lr处ug理码v用t器 返未e错oh远Fi代
t跨n的。a查R说.tEds象peGpsnFtH异了rreR话wdrHW正ee。。B对s远sB.eR是ns程tIN果为ter问的sRw程用eso qBs下satn一w.明d喔y访nuuW是tr检q如过如oe。C查eetFW话。ute.处的eetbtrF比sN常中?Sqe常oeroe了W理Bbt否o你e检eClo的pu域m ...

谁有OSID光洁面产品详细介绍?
双鉴式成像感应探测器(英文缩写OSID),就是其中的一种一对多的红外对射探测器。以下简称OSID,。注:国内也称光截面探测器。探测器系统工作原理对于大型、开发式空间(机场、火车站、体育馆、购物大卖场)来说,由于环境的限制,对可靠的火灾探测提出了挑战。 成像器上的终端卡提供了所有的现场接线端子,...

OSID怎么样?
概述Open-area Smoke Image Detection缩写OSID;翻译中文:双鉴式成像感烟探测系统,大型开放空间火灾探测器的可靠技术。“OSID易于安装和维护,并且能解决传统对射式探测器的主要缺陷,不会受到雾气,昆虫和光线的影响。该产品部署简单,烟雾探测性能卓越。OSID 拥有双波长多光束专利技术,有CMOS成像器,高级...

为什么我安装mac os x 10.6总是失败?
用移动硬盘安装的方法,系统写到移动硬盘里了,可是安装的时候,卡在灰苹果那,非要我重启,试了N次依然...7、格式化:用于安装Mac系统的分区,在安装之前需要使用WINPM软件格式化成FAT32格式,并且将这个分区的ID...Mac OS X 是苹果电脑公司为麦金塔电脑开发的专属操作系统 Mac OS 的最新版本。Mac OS X 于 2001年...

苹果开发者帐号如何注册,收费吗?
1、打开https:\/\/developer.apple.com\/cn\/网站,在最右下角点“注册”。2、在新出现的页面中点“sign in”,然后输入apple ID及密码,再点“sign in”。3、在页面下方勾选方框,再点击“agree”。4、在新页面中输入个人信息,点击“register”。即注册成功。开发者帐号是否收费,分两种情况:若是仅...

OSID怎么样?
Open-area Smoke Image Detection缩写OSID;翻译中文:双鉴式成像感烟探测系统,大型开放空间火灾探测器的可靠技术。“OSID易于安装和维护,并且能解决传统对射式探测器的主要缺陷,不会受到雾气,昆虫和光线的影响。该产品部署简单,烟雾探测性能卓越。OSID 拥有双波长多光束专利技术,有CMOS成像器,高级的...

id卡能否模拟到nfc手机中
品牌型号:华为P50 系统:HarmonyOS 2 id卡是不能用nfc模拟的,因为id卡属于高频率卡、加密卡,所以它是不支持nfc模拟的。NFC可以模拟IC卡,不能模拟ID卡,最主要的原因是两种卡的频率一个是高频、一个是低频,无法实现读取。nfc模拟的介绍:NFC卡模拟是一个功能强大且免费的NFC卡模拟器,可模拟各类...

丰城市17820489537: ios swift nsobject是所有类的父类吗 -
却券猗清: 1. ios swift 中nsobject不是所有类的父类2. ios swift中AnyObject才是所有类的父类3. 在ios中NSObject等objective-c中的类可以直接使用

丰城市17820489537: NSObject 到底是不是所有 Objective C Object 的根 -
却券猗清: Objective-C里面实际上有两个根,也不懂苹果那帮哥们咋个要这么设计,目前没体会到好处和坏处,反正用起来还凑合.NSObject,目前我没遇到不是它子类的类,所以我觉得它是根,如果有其他我没有遇到的,那就另说.但是Objective-C里...

丰城市17820489537: 如何将C++和Object - C混合编程开发IOS软件 -
却券猗清: Using C++ With Objective-C 苹果的Objective-C编译器允许用户在同一个源文件里自由地混合使用C++和Objective-C,混编后的语言叫Objective-C++.有了它,你就可以在Objective-C应用程序中使用已有的C++类库.Objective-C和C++混编的要...

丰城市17820489537: ios 怎么调用分类里面的方法 -
却券猗清: ios category类别的使用 Objective-C提供了一个非常灵活的类(Class)扩展机制-类别(Category).类别用于对一个已经存在的类添加方法(Methods).你只需要知道这个类的公开接口,不需要知道类的源代码.需要注意的是,类别不能为已...

丰城市17820489537: ios开发,要获取一个json数据量很大,上千条,怎么处理 -
却券猗清: 1.OS网络开发中,一般涉及到网络请求接口,都离不开关于json数据的处理.json数据作为各个前端和后台交互传递数据的格式,具有跨平台,轻型数据量,简洁易懂的优点.2.iOS中的json数据处理核心就是json串与json对象之间的转换.json串与json对象都是基于iOS中NSObject类,在与后台的交互中,NSObject类与NSData类之间能互相转换,用于数据交互.3.NSData与NSObject类之间的转换在iOS框架中很简单,也很常见,此处不再赘述,本篇着重讨论json串与json对象的转换.大概就这样知识点,你听了明白吗

丰城市17820489537: IOS 中NSDictionary 与 Dictionary 有什么区别 -
却券猗清: 1 NSDictionary是NSObject的子类,可以通过键值对的形式记录数据2 例如键key是@"name",值value是@"张三",存进字典dic中后,当你要取得@"张三",你可以根据[dic valueForKey:@"name"]找到这个数据3 没有Dictionary这个类4 以上

丰城市17820489537: ios应用开发Objective - C内存管理基础是什么?
却券猗清: 对于我们.net开发人员来说,.net为我们提供了自动内存管理的机制,我们不需去关心内存的管理.但是iPhone开发中却是不能的.这篇文章将简述一下Objective-C的内存管理机制和方法和一些特性. 手动的进行内存管理 Cocoa和Objective-C的...

丰城市17820489537: ios中多线程有哪几种实现方法?谈谈对gcd的理解
却券猗清: 4.谈谈线程发理解iOS几种实现线程答:进程线程每线程自单独任务优点效率快 缺点安全耗费资源三种第种使用@synchronized(self)第二种使用GCD第三种使用NSOperationQueue

丰城市17820489537: ios property 属性有哪些修饰符 有什么作用 -
却券猗清: 1.读写性修饰符:readwrite readonlyreadwrite:表明这个属性是可读可写的,系统为我们创建这个属性的setter和getter方法.readonly:表明这个属性只能读不能写,系统只为我们创建一个getter方法,不会创建setter方法2.setter相关修饰符...

丰城市17820489537: iOS 给可变字典排序 加号方法 -
却券猗清: NSMutableDictionary *targetMutableDictionary = [mutableDictionary1 copy]; [targetMutableDictionary addEntriesFromDictionary:mutableDictionary2];/*------------------------------------创建可变字典------------------------------------*/ //创建 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网