/**
 * Represents a holder of any native pointer.
 *
 * The native reference can be explicitly deleted via {@linkcode release()},
 * or implicitly when the JS garbage collector runs.
 *
 * Instances of {@linkcode PointerHolder} are always backed by a `jsi::HostObject`.
 */
export interface PointerHolder {
    /**
     * Manually release this reference to the native pointer.
     * This will ensure that JS will no longer hold a strong reference,
     * and memory can be safely cleaned up.
     *
     * If the native pointer is still referenced elsewhere in native code,
     * the underlying memory will not be deleted unless the other references
     * are also released.
     *
     * If this is not called, the memory will only be cleaned once the
     * JS gabage collector decides to delete this object, which might be
     * at any point in the future.
     *
     * Calling `release()` is not _required_ as the GC will destroy this
     * object eventually anyways, but it is _recommended_ to optimize
     * memory usage.
     *
     * After manually releasing a pointer, all future methods on this
     * object will throw an Error.
     */
    release(): void;
    /**
     * Get if the refernce to the native pointer is still valid and strong.
     *
     * If this is `false`, this object has been manually released with
     * {@linkcode release}() and all other methods on this object will throw an Error.
     */
    readonly isValid: boolean;
}
//# sourceMappingURL=PointerHolder.d.ts.map