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