解决方法
Why is id a weak reference pointer?
id不是一个弱参考指针,至少不是在ARC所有权.是否对对象的id类型引用很弱取决于已被声明为__weak(和变体)的引用以及对象的类实际支持弱引用.
但是,您可以说,id提供了弱类型,尽管我认为动态/鸭型打字是一个更准确的描述.由于id类型引用不包含编译时类类型信息,因此编译器无法确定底层对象是否可以响应给定的选择器,这可能会导致运行时错误.
How is it able to handle any class type pointer?
这是the Objective-C language的定义的一部分.编译器将id视为每个Objective-C类的超类型,并将其视为不同的id.参见下面的答案.
At runtime,how can we detect that which type of class pointer is assigned to id?
在Apple的Objective-C运行时,分配给对象的内存中的第一个字节必须指向该对象的类.您可能会看到其他地方被引用为isa指针,这就是Apple的运行时发现每一个对象的类. id类型也被定义为具有这些信息.事实上,它唯一的属性是isa指针,这意味着all1的Objective-C对象符合这个定义.
如果你有一个id参考,并想要发现引用对象的类,你可以发送它-class:
id someObject; // Assign something to someObject // Log the corresponding class Class c = [someObject class]; NSLog(@"class = %@",c); // Test whether the object is of type NSString (or a subclass of NSString) if ([someObject isKindOfClass:[NSString class]]) { NSLog(@"it's a string"); }
1Tagged pointers是这种结构的显着偏差,(部分)因为它们不应该直接访问isa指针.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。