Understand NativeObject ownership and dependencies
masterRive uses a dependency-based ownership model for its C++ objects.
- Ownership: When an object has a
hasdependency on another, the creator "owns" that dependency. - Release Mechanism: When a
NativeObjectcallsrelease(), it first releases its reference to all its dependents. It then decreases its own reference counter. If the counter reaches 0, the object is disposed of and its JNI destructor is called. - Cascading Release: Releasing a high-level object can trigger a cascade of releases. For example, a
RiveArtboardRendererowns aFile. Releasing the renderer releases theFile, which in turn releases its own dependents (likeArtboardorStateMachineInstance).
Example Hierarchy:
RiveArtboardRenderer$\rightarrow$ owns $\rightarrow$File$\rightarrow$ owns $\rightarrow$Artboard$\rightarrow$ owns $\rightarrow$StateMachineInstance$\rightarrow$ owns $\rightarrow$SMIInput/LayerState.