首页 > 代码库 > NSObject 类分析(未完成)
NSObject 类分析(未完成)
NSObject 类分析(未完成)
转载请注名出处 http://blog.csdn.net/uxyheaven
iOS 的 NSObject 类没有开源, 但是呢 runtime开源了,里面有个类 Object 看接口和NSObject差不多,下面我就对着 Object 的代码来分析下 NSObject
runtime代码在http://opensource.apple.com/tarballs/objc4/objc4-493.9.tar.gz下载,Object在<Object.h>, 这里的文件夹写着Obsolete, 呃.
属性
isa
是一个指向Class的指针,具体请看这篇文章Objective-C objc_class 介绍
方法
class
实例方法返回的是isa指针, 类方法返回的是本身
代码实现如下:
- class
{
return (id)isa;
}
+ class
{
return self;
}
superclass
返回父类
代码实现如下:
+ superclass
{
return class_getSuperclass((Class)self);
}
- superclass
{
return class_getSuperclass(isa);
}
调用的是runtime中的class_getSuperclass方法, 跟踪到最后实例方法返回的是isa->superclass,类方法返回的是self->superclass
static class_t *
getSuperclass(class_t *cls)
{
if (!cls) return NULL;
return cls->superclass;
}
- (BOOL)isMemberOf:aClass
- (BOOL)isMemberOf:aClass
{
return isa == (Class)aClass;
}
看代码可以得知是通过比较实例对象的isa是否和 传过来的[类 Class] 一样来判断的.而实例对象的isa确实就是指着实例对象的类的.
- (BOOL)isKindOf:aClass
- (BOOL)isKindOf:aClass
{
register Class cls;
for (cls = isa; cls; cls = class_getSuperclass(cls))
if (cls == (Class)aClass)
return YES;
return NO;
}
// class_getSuperclass 展开后如下
static class_t *
getSuperclass(class_t *cls)
{
if (!cls) return NULL;
return cls->superclass;
}
代码思路也很好理解,如果自己的isa等于aClass(aClass的父类,此处循环)就返回YES,否则返回NO
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。