Apple\xe2\x80\x99s 的解释是
\n\n\n\n\n\n
objc_getClass不同之处在于objc_lookUpClass,如果类未注册,objc_getClass则调用类处理程序回调,然后再次检查该类是否已注册。objc_lookUpClass不调用类处理程序回调。
但我不太理解“类处理程序回调”。你能更详细地解释一下吗?我希望一些代码可以显示它们的差异\xef\xbc\x8c非常感谢!
\n小智 3
Apple 文档中对这两种方法的解释不清楚,但 Objective C 运行时代码是开源的,可以从Apple Opensource获取。
这两种方法的实现是:
Class objc_getClass(const char *aClassName)
{
if (!aClassName) return Nil;
// NO unconnected, YES class handler
return look_up_class(aClassName, NO, YES);
}
Class objc_lookUpClass(const char *aClassName)
{
if (!aClassName) return Nil;
// NO unconnected, NO class handler
return look_up_class(aClassName, NO, NO);
}
Run Code Online (Sandbox Code Playgroud)
这两个方法都委托给look_up_class方法,最后一个参数具有不同的参数includeClassHandler。
但是看看我们的实现look_up_class,我们可以看到最后两个参数实际上根本没有被使用!
Class
look_up_class(const char *name,
bool includeUnconnected __attribute__((unused)),
bool includeClassHandler __attribute__((unused)))
{
if (!name) return nil;
Class result;
bool unrealized;
{
rwlock_reader_t lock(runtimeLock);
result = getClass(name);
unrealized = result && !result->isRealized();
}
if (unrealized) {
rwlock_writer_t lock(runtimeLock);
realizeClass(result);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
因此,总而言之,objc_getClass和 的objc_lookUpClass行为都是相同的。
| 归档时间: |
|
| 查看次数: |
999 次 |
| 最近记录: |