in Chisel/Chisel/CHLObjcInstanceCommands.mm [49:72]
static bool predicatePrecheck(id obj, const std::unordered_set<Class> &classSet)
{
IsValidArgs args{classSet};
if ([obj isKindOfClass:objc_getClass("__NSCFDictionary")]) {
CFDictionaryApplyFunction((CFDictionaryRef)obj, &isValidKeyValue, &args);
} else if ([obj isKindOfClass:objc_getClass("__NSCFSet")]) {
CFSetApplyFunction((CFSetRef)obj, &isValidObject, &args);
} else {
// Skip classes containing NSPlaceholder.
// TODO: Figure out better way to ignore invalid instances.
char *name = (char *)object_getClassName(obj);
while (*name == '_') ++name;
if (strncmp(name, "NSPlaceholder", sizeof("NSPlaceholder") - 1) == 0) {
args.isValid = false;
}
}
if (!args.isValid && getenv("FINDINSTANCES_DEBUG")) {
printf("%p has class %s but contains non objc data\n", obj, object_getClassName(obj));
}
return args.isValid;
}