id 和 instancetype】的更多相关文章

id: 好处:可以调用任何对象方法 坏处:不能进行编译检查 + (id)person; instancetype 好处:自动识别当前类的对象 坏处:不会提示返回的类型 + (instancetype)person; 注:Xcode5之后才有instancetype,在之前一般用id,instancetype出现之后一般用instancetype __kindof:表示当前类或者它的子类 好处:提示返回的类型,也不会出现提示类型不匹配的警告 + (__kindof Person *)person;…
静态数据类型 默认情况下所有的数据类型都是静态数据类型 静态数据类型的特点: 1 在编译时就知道变量的类型 2 知道变量中有哪些属性和方法 3 在编译的时候就可以访问这些属性和方法 4 并且如果是通过静态数据类型定义变量,如果访问了不属于静态数据类型的属性和方法,那么编译器就会报错 动态数据类型 id 是一个动态数据类型 动态数据类型的特点 1 在编译的时候编译器并不知道变量的真实类型,只有在运行的时候才知道它的真实类型 2 并且如果通过动态数据类型定义变量,如果访问了不属于动态类型的属性和方法…
相同点: 都可以作为方法返回值类型 在initWithName:方法中是一样的,例如: - (id)initWithName:(NSString *)name; - (instancetype)initWithName:(NSString *)name; 编译器在编译时直接将id转换成instancetype类型 不同点: 1.instancetype只能作为返回值类型,不能像id一样作为参数类型; 2.作为返回值类型时,在自定义方法中也有不同之处 + (id)constructAnArray;…
  在使用Objective-C语言进行iOS应用开发的时候,常常会涉及到id.NSObject *.id.instancetype这四个概念的使用,但这四者也是iOS初学者最易混淆的内容,下面小编看了一些iOS开发教程和文档,搜罗了他们的不同用法,分享给大家,一起来看看吧. 1. id与NSObject * (1)id是Objective-C对象,但是并不一定是NSObject对象,并非所有的Foundation/Cocoa对象都是继承于NSObject对象的,比如NSProxy.同时,id与…
我写了一篇 Id vs Instancetype的文章,欢迎访问!…
首先明确 id 和 instancetype 都是万能指针,都能指向一个对象:(instancetype == id == 万能指针 == 指向一个对象) 主要区别亮点: 1. id 在编译时候不能判断对象的真是类型,但是instancetype 编译的时候可以判断对象真是类型,这样的话,编写代码时候,如果类型指错,instancetype可以告警.我们应该尽量把告警暴露在编译的时候. 2.另外  instancetype 只能用来做返回值,不能和id一样定义变量. // id在编译的时候不能判…
1. id和instancetype类型, id和instancetype类型区别: 1. id和instancetype都可以用来作为方法的返回值 2. id可以用来定义类型,instancetype不能用来定义类型 id obj; instancetype obj2; // 错误 3. instancetype可以精确返回值类型 2.动态类型检测, 1. isKindOfClass判断某个对象是否是类的实例对象,或者子类的实例对象(对象和类) 格式:[对象 isKindOfClass 类对象…
1.import和include的区别: import可以防止头文件的重复包含 2.NSLog 和printf的区别: 1,NSLog可以自动换行, 输出调试信息, printf不能. 2,NSLog 函数的参数是一个NSString 对象 3,printf函数的参数是一个字符串常量指针 3.当创建一个对象的时候:Person *p1 = [Person new],做了三件事情: 1,申请堆内存空间: 2,给实例变量初始化: 3,返回所申请空间的首地址; 4. 类方法和对象方法的比较 1. 对象…
本次九宫格案例: (1)导入app.plist和各种图片素材,方便兴许开发.实际开发中,也是如此. (2)把plist中数组导入进来. --由于本案例中app.plist终于是一个数组,数组里面是字典.所以我们须要一个数组类型来接受这个plist文件. --我们利用之前掌握的在变量的getter中进行延迟载入数据. #import "ViewController.h" @interface ViewController () @property(nonatomic,strong) NS…
id 当不确定数组元素类型时,可以选择使用id NSObject和id都可以指向任何对象 NSObject使用时必须强转 instantceType 只能返回和方法所在类相同类型的对象    返回值类型  不能传参数 id只能返回未知类型的对象 参数使用…
1.id和instancetype都能省去具体类型,提高代码的通用性.而NSObject *则没有这种功能. 2.instancetype只能用于方法的返回类型,而id用处和NSObject *类似. 3.instancetype会告诉编译器当前的类型,这点和NSObject *类似,但id对于编译器却是无类型的,调用任何方法不会给出错误提示. 4.对于init方法,id和instancetype是没有区别的.因为编译器会把id优化成instancetype.当明确返回的类型就是当前Class时…
四年前Clang添加了关键字instancetype,目的在于取代-alloc和-init等方法的返回类型id,那么使用instancetype到底比id好在哪里? instancetype宣言 不管何时,只要一个class要返回它相同的类实例,使用instancetype都是更加合适的. 我们知道,当调用类中(或者子类)的-alloc.-init或者class factory(+)方法,使用instancetype关键字会返回它的类实例.在这种情况下用instancetype而不是id有100…
instancetype.id.NSObject的区别 - simalone   1.instancetype只能用于方法的返回类型,而id用处和NSObject *类似. 2.instancetype 和  NSObject *  会告诉编译器当前的类型,但id对于编译器却是无类型的,调用任何方法不会给出错误提示. 3.对于init方法,id和instancetype是没有区别的.因为编译器会把id优化成instancetype.当明确返回的类型就是当前Class时,使用instancetyp…
前些时间在源码里看到instancetype返回类型,一脸惊异,表示接触iOS不久没见过这东西,但发现跟id功能差不多.故查了一些资料,了解了两者之间的区别,故将资料简单翻译整理了一下,为博客充一个数 : ) 转载保留原链接哦原文地址 id类型 id数据类型可以存储任何类型的对象.可以说,它是一般对象类型. 例如可以声明一个为id类型的变量: id graphicObject 也可声明方法使其具有id类型的返回值: - (id)newObject:(int)type; id类型是Objectiv…
转自:http://blog.csdn.net/yangzychina/article/details/8818941 今天研究代码的时候,发现居然返回 instancetype 类型,很惊讶自己学识浅显. Clang的文档里提到instancetype is a contextual keyword that is only permitted in the result type of an Objective-C method. 也就是说,instancetype只能作为返回值,不能像id…
1. id 与 NSObject * (1) id 是 Objective-C 对象,但是并不一定是NSObject对象,并非所有的Foundation/Cocoa对象都是继承于NSObject对象的,比如NSProxy.同时,id与NSObject对象之间有很多的共同方法,比如retain与release等方法.更一步来说:所有的对象本质来说都是 id 类型的. (2) 对于id来说,你可以调用任意可见的selector,编译器和IDE不会进行类型检查,这个时候就需要你自己进行类型检查并且进行…
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和void *pUserName,[userName print] 是可以的,但[pUserName print] 在编译时就会报错,因为ObjeciveC的编译器看到id,会假定它可以接受任何message,虽然在runtime时可能并不是这样的,但pUserName并不是Objective C类型,编…
OC是一门正在迅速发展的语言,ARC,object literals ,subscripting ,blocks,Auto Synthesis,让我们看到它惊人的改变.instancetype是clang3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的OC对象.在这之前,我们知道可以用id来表示未知返回类型,那为什么要用instancetype呢? [关联返回类型] 根据Cocoa的命名规则,满足下述规则的方法,将会返回一个方法所在类类型的对象,这些方法就被称为关联返回类型的…
// Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property int age; - (void)test:(id)obj1; //编译不报错 - (void)demo:(instancetype)obj2; //不能定义变量,不能定义形参数 @end // // Person.m #import "Person.h" @implementation Person //…
[instancetype和id的异同] 相同点:都可以作为方法的返回类型. 不同点: (1)instancetype可以返回方法所在类相同类型的对象,id只能返回未知类型的对象: (2)instancetype只能作为返回值,不能像id一样作为参数: 注意点: 1.对于init方法,id和instancetype是没有区别的.因为编译器会把id优化为instancetype.当明确返回的类型就是当前类时,使用instancetype能避免id带来的编译不出的错误情况.…
//用block只有两种:同步执行/异步执行(参数1:队列;参数二:任务) dispatch_async(dispatch_get_global_queue(0, 0),^{ });//异步在新的线程中执行任务,具备开启新线程能力,能跳过该代码执行后面代码 dispatch_sync(dispatch_get_global_queue(0, 0), ^{ });//同步:在当前线程中执行任务,不具备开启新线程能力,不能跳过该代码执行后面代码 //队列:并发队列(可以让多个任务同时执行自动开启多个…
1.手写冒泡跟插入排序 冒泡排序来源于生活常识,相当于把数组竖起来,轻的向上,重的向下.void bubbleSort(int[] unsorted) { ; i < unsorted.Length; i++) { for (int j = i; j < unsorted.Length; j++) { if (unsorted[i] > unsorted[j]) { int temp = unsorted[i]; unsorted[i] = unsorted[j]; unsorted[j…
在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads NSThread GCD NSOperation & NSOperationQueue 所以接下来,我会一一讲解这些方案的使用方法和一些案例.在将这些内容的时候,我也会顺带说一些多线程周边产品.比如: 线程同步. 延时执行. 单例模式 等等. Pthreads 其实这个方案不用说的,只是拿来充个数,为了让大家了解一下就好了.百度百科里是这么说的: POSIX线程(POSIX threads),简称Pthreads,是线程…
1.  NSLog           是Foundation提供的一个输出函数,它的功能非常强大,不仅可以输出字符串,还可以输出各种对象,到后面程序还会见到大量的使用NSLog()函数. 2.  NS          是一个前缀,Cocoa对其所有函数.常量.类型前面都会增加“NS”前缀,该前缀用于区分该函数来自Cocoa,而不是来自其它程序包 3.常用扩展名 .c   C语言的源程序 .cpp  .cc    C++的源程序 .h    头文件 .m   oc源程序 .mm  oc++源程…
1.基本概念 同步任务:在当前线程按顺序执行,不开启新的线程 异步任务:有开新线程的欲望   串行队列:一个一个执行 并行队列:多个任务同时执行 --------------------------------------------------------- 串行队列-同步任务 在当前线程执行 串行队列-异步任务  开一个子线程执行 /** 串行队列 */ - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent…
1.OC内存管理 1)范围:管理任何继承NSObject的对象,对其他的基本数据类型无效(堆区),否则会造成内存泄露 2)原理:任何对象都可能有用一个或多个所有者,只要一个对象至少还拥有一个所有者,它就会继续存在 3)对象的引用计数器,retain(+1).release(-1).retainCount得到引用计数器的值 4)内存管理的分类:MRC(手动管理).ARC(自动管理).垃圾回收(不支持) 2.引用计数器的使用 dealloc:释放对象 先调用[super dealloc] 我们创建一…
关于iOS多线程 概述 这篇文章中,我不会说多线程是什么.线程和进程的区别.多线程有什么用,当然我也不会说什么是串行.什么是并行等问题,这些我们应该都知道的. 在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads NSThread GCD NSOperation & NSOperationQueue 所以接下来,我会一一讲解这些方案的使用方法和一些案例.在将这些内容的时候,我也会顺带说一些多线程周边产品.比如: 线程同步. 延时执行. 单例模式 等等. Pthreads 其…
写在开头: 作为一个iOS开发,也许你不知道NSUrlRequest.不知道NSUrlConnection.也不知道NSURLSession...(说不下去了...怎么会什么都不知道...)但是你一定知道AFNetworking. 大多数人习惯了只要是请求网络都用AF,但是你真的知道AF做了什么吗?为什么我们不用原生的NSURLSession而选择AFNetworking? 本文将从源码的角度去分析AF的实际作用. 或许看完这篇文章,你心里会有一个答案. 先从最新的AF3.x讲起吧: 首先,我们…
通常我们在 iOS 中发生什么事件时该做什么是由 Delegate 实现的,例如 View 加载完后会触发 viewDidLoad.  Apple 还为我们提供了另一种通知响应方式,那就是 NSNotification,系统中(UIKeyboardDidShowNotification 等) 以及某些第三方组件(例如 ASIHTTPRequest 的 kReachabilityChangedNotification 等). NSNotificationCenter 较之于 Delegate 可以…
单例模式作用 可以保证在程序运行过程中,一个类只有一个实例,而且该实例易于供外界使用 从而方便地控制了实例个数,并节约系统资源 单例模式使用场合 在整个引用程序中,共享一份资源(这份资源只需要创建初始化1次,只分配一次存储空间) 例如:背景音乐,音频调节器等 单例的简单使用 使用单例的目的就是为了要在程序运行过程中,共享一份资源,且这份资源只会初始化一次,只分配一次存储空间,节约系统资源:先来看一下平时我们创建对象时,内存地址的变化情况: ##### 创建对象内存分配地址演示 1.这里用SJTo…