gpt4 book ai didi

iphone - isa 是弃用问题

转载 作者:行者123 更新时间:2023-12-03 19:26:57 28 4
gpt4 key购买 nike

以下代码表示警告为

Direct access to objective-c's isa is deprecated in favor of object_setClass() and object_getClass()

代码

  if(object->isa == encodeState->fastClassLookup.stringClass)     
{ isClass = JKClassString; }
else if(object->isa == encodeState->fastClassLookup.numberClass)
{ isClass = JKClassNumber; }
else if(object->isa == encodeState->fastClassLookup.dictionaryClass)
{ isClass = JKClassDictionary; }
else if(object->isa == encodeState->fastClassLookup.arrayClass)
{ isClass = JKClassArray; }
else if(object->isa == encodeState->fastClassLookup.nullClass)
{ isClass = JKClassNull; }
else
{
if([object isKindOfClass:[NSString class]])
{ encodeState->fastClassLookup.stringClass = object->isa; isClass = JKClassString; }
else if([object isKindOfClass:[NSNumber class]]) { encodeState->fastClassLookup.numberClass = object->isa; isClass = JKClassNumber; }
else if([object isKindOfClass:[NSDictionary class]]) { encodeState->fastClassLookup.dictionaryClass = object->isa; isClass = JKClassDictionary; }
else if([object isKindOfClass:[NSArray class]]) { encodeState->fastClassLookup.arrayClass = object->isa; isClass = JKClassArray; }
else if([object isKindOfClass:[NSNull class]]) { encodeState->fastClassLookup.nullClass = object->isa; isClass = JKClassNull; }

我应该做什么改变来清除该警告?请帮助我。

最佳答案

任何对象上的 isa 字段都是对该对象的类的引用;它是 ObjC 运行时内部机制的一部分,取消引用对象指针来获取该字段是有效的,但很脆弱并且会破坏封装。

编译器在警告中告诉您可以使用 object_getClass,这是 ObjC 运行时中的一个函数来检索相同的内容。

您显示的代码片段避免标准-class method在每个 NSObject 上,而似乎是在获取 isa ,目的是从中获得性能优势。这必须是一些对性能极其敏感的代码才能保证这一点,但如果是这样,那么 object_getClass 看起来是 not much slower .

关于iphone - isa 是弃用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17358362/

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