[RLMSchema] Don't iterate through runtime classes unnecessarily #8721
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In my application, there are quite a few crashes with an unclear stack trace (see the screenshot). During my investigation, I found out what is happening:
deleteData(forType:)
. Yes, I am aware of the crosslink issue; this is not that situation. I will look into that MR later with my experience on how to fix the deletion problem.deleteData(forType:)
tries to determine whether to clear or delete the table.-schemaForClassName (RLMSchema)
.objectSchemaByName
after+(instancetype)schemaWithObjectClasses
), and none of them includes the one I'm deleting, which makes sense.+classForString (RLMSchema)
, which then goes toRLMRegisterClassLocalNames
and iterates through all classes. And I remind you that I have explicitly specified the ones I am using.RLMIsObjectSubclass
.class_getSuperclass
, something goes wrong.I understand that it would be good to figure out which specific class is causing this issue, but I don't have that capability. However, it seems that this MR will eliminate the need to call class_getSuperclass unnecessarily.