美文网首页
id 、NSObject、id<NSObject>

id 、NSObject、id<NSObject>

作者: liboxiang | 来源:发表于2019-02-23 17:30 被阅读1次
  • id是通用的。通过使用id您告诉编译器您将在以后填写有关使用的详细信息。编译器假定您拥有的任何代码都是正确的,并且不会向您发出任何警告。在运行时,会进行检查以验证您要执行的操作,如果您的代码错误,您将收到异常。

  • NSObject是具体的。通过使用NSObject你告诉编译器确切的对象是什么。当您尝试在其上调用方法时,将检查它们的NSObject理解。如果出错,您将收到编译时错误。

id是Objective-C中使用的一个特殊关键字,意思是“某种对象”。id 指向的对象并不全是 NSObject 的子类。它不包含isa指针(isa给对象访问它的类,并通过类,它来自它继承的所有类),所以你输了有关该对象的编译时信息。

NSString* aString = @"Hello";
id anObj = aString;  

NSObject包含isa指针。

请考虑以下代码:

id someObject = @"Hello, World!";
[someObject removeAllObjects];

在这种情况下,someObject将指向一个NSString实例,但除了它是某种对象之外,编译器对该实例一无所知。所述removeAllObjects消息是由一些可可或可可触摸对象(如定义的NSMutableArray),从而,编译器不抱怨,即使该代码将在运行时生成异常,因为一个NSString对象不能响应removeAllObjects

重写代码以使用静态类型:

NSString *someObject = @"Hello, World!";
[someObject removeAllObjects];

意味着编译器现在将生成错误,因为removeAllObjects它没有在NSString它知道的任何公共接口中声明。

  • id<NSObject>
    将一个对象声明为 id<NSObject> ,意味着编译器不对其作任何类型检查,但是这个对象所属的类默认实现名为 NSObject 的protrol(是的,也有一个协议叫 NSObject )。其实,在实际操作中,我们往往不会去关心一个对象的所属的类,而是这个对象会响应什么方法,id<NSObject> 表明了这个指针指向了一个实现了 NSObject 协议的方法的类的对象。

相关文章

  • id 、NSObject、id<NSObject>

    id是通用的。通过使用id您告诉编译器您将在以后填写有关使用的详细信息。编译器假定您拥有的任何代码都是正确的,并且...

  • id<NSObject>

    mark: id、NSObject *、id、instancetype的区别id ,NSObj...

  • id 、NSObject * 和 id<NSObject&

    今天 allen 问了我一个问题,id和NSObject之间有什么区别,经过大神henry指点给我这个网址 id ...

  • iOS中id - NSObject* - id<NSOb

    id: NSObject *: id iOS中很多类定义很奇葩,类名叫NSObject,定义个...

  • iOS - id与NSObject*与id<NSObjec

    id: 简单地申明了指向对象的指针,没有给编译器任何类型信息,因此,编译器不会做类型检查。 你可以发送任何信息给i...

  • iOS中id与NSObject * 和id<NSObjec

    1. 这是id的定义,它就是一个指针,它可以指向的类型不仅局限于NSObject, typedef struct ...

  • NSProxy <NSObject>

    干嘛用的?为什么是 不是继承与NSObject? 查看 NSObject.h发现 苹果有一个<...

  • <NSObject>协议

    协议 写在前头,上一篇我们介绍了NSObject基类中定义的函数,但是我们发现在Cocoa有两...

  • id、NSObject *、id、insta

    一. id 与 NSObject * 1、id是OC对象但不一定是NSObject对象,并非所有的Foundati...

  • iOS一些面试题总结2019.3

    1.id、instancetype、NSObject *、id的区别? 根据Cocoa的命名规...

网友评论

      本文标题:id 、NSObject、id<NSObject>

      本文链接:https://www.haomeiwen.com/subject/zwvpyqtx.html