gpt4 book ai didi

ios objc_getClass 和 objc_lookUpClass 有什么区别

转载 作者:行者123 更新时间:2023-12-03 01:41:27 26 4
gpt4 key购买 nike

苹果的解释是

objc_getClass is different from objc_lookUpClass in that if the class is not registered, objc_getClass calls the class handler callback and then checks a second time to see whether the class is registered. objc_lookUpClass does not call the class handler callback.

但我不太理解“类处理程序回调”。你能更详细地解释一下吗?我希望有一些代码可以显示它们的区别,非常感谢!

最佳答案

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);
}

这两个方法都委托(delegate)给 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;
}

因此,总而言之,objc_getClassobjc_lookUpClass 的行为相同。

关于ios objc_getClass 和 objc_lookUpClass 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41195429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com