while (![clsStr isEqualToString:@"NSObject"] && clsStr) {
NSArray<NSString *> *ignoredIvarList = nil;
if ( [(Class)cls respondsToSelector:@selector(tab_ignoredIvarList)] ) {
ignoredIvarList = [(Class)cls tab_ignoredIvarList];
}
NSMutableArray *ivarListArrM = [NSMutableArray array];
unsigned int outCount = 0;
Ivar *ivarList = class_copyIvarList(cls, &outCount);
if ( !ivarList ) return nil;
if ( 0 == outCount ) return nil;
for ( int i = 0 ; i < outCount ; ++i ) {
const char *name = ivar_getName(ivarList[i]);
NSString *nameStr = [NSString stringWithUTF8String:name];
if ( [ignoredIvarList containsObject:nameStr] )
continue;
[ivarListArrM addObject:nameStr];
}
free(ivarList);
[finalIvarResult addObjectsFromArray:ivarListArrM];
cls = class_getSuperclass(cls);
clsStr = NSStringFromClass(cls);
}
return finalIvarResult;
if ( !data[clsStr] ) {
data[clsStr] = _sj_get_tab_ivar_list_contain_inherit(cls).copy;
}
return data[clsStr];