Iphone isa是一个弃用问题

Iphone isa是一个弃用问题,iphone,json,ios6,Iphone,Json,Ios6,以下代码表示警告为: Direct access to objective-c's isa is deprecated in favor of object_setClass() and object_getClass() 代码 要清除该警告,我应该做什么更改?请帮助我。任何对象上的isa字段都是对该对象类的引用;它是ObjC运行时内部机制的一部分,取消对对象指针的引用以获取该字段是功能性的,但很脆弱,会破坏封装 编译器在警告中告诉您可以使用object\u getClass,这是ObjC运行

以下代码表示警告为:

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


要清除该警告,我应该做什么更改?请帮助我。

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

编译器在警告中告诉您可以使用
object\u getClass
,这是ObjC运行时中用于检索相同内容的函数

您显示的代码片段避免了每个
NSObject
上的标准
-class
,而似乎是为了从中获得性能优势而获取
isa
。这必须是一些对性能非常敏感的代码才能保证这一点,但如果是这样,那么
对象_getClass
看起来就是这样。

包括

替换所有内容,如
array->isa=\u JKArrayClass带有
对象\u setClass(数组,\u JKArrayClass)

还有像
class=array.isa
class=object\u getClass(array)


请参阅:

您是如何克服此错误的?我面临同样的问题!
  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;       }