@@ -36,32 +36,20 @@ final class ReferencedAssetLoader {
3636 RCTLogError ( " \( error) " )
3737 }
3838
39- /// Decodes an asset and applies the result on the main thread.
40- ///
41- /// - `onMain: true` — decode + apply run synchronously on the caller's
42- /// thread (must already be main). Used for `decodeImage` which is not
43- /// thread-safe.
44- /// - `onMain: false` — decode runs on a serial background queue, then
45- /// apply + completion dispatch to main. The `[self]` capture keeps the
46- /// `ReferencedAssetLoader` (and its `activeFileRef`) alive until the
47- /// main-thread block completes, preventing use-after-free on the factory.
39+ /// Decodes an asset on a background serial queue, then applies the result
40+ /// on the main thread. The `[self]` capture keeps `activeFileRef` alive
41+ /// until completion, preventing use-after-free on the factory.
4842 private func decodeAndApply< T> (
49- onMain: Bool ,
5043 decode: @escaping ( ) -> T ? ,
5144 apply: @escaping ( T ) -> Void ,
5245 completion: @escaping ( ) -> Void
5346 ) {
54- if onMain {
55- if let result = decode ( ) { apply ( result) }
56- completion ( )
57- } else {
58- Self . decodeQueue. async { [ self ] in
59- let result = decode ( )
60- DispatchQueue . main. async {
61- if let result { apply ( result) }
62- completion ( )
63- _ = self
64- }
47+ Self . decodeQueue. async { [ self ] in
48+ let result = decode ( )
49+ DispatchQueue . main. async {
50+ if let result { apply ( result) }
51+ completion ( )
52+ _ = self
6553 }
6654 }
6755 }
@@ -75,17 +63,17 @@ final class ReferencedAssetLoader {
7563 }
7664 switch asset {
7765 case let imageAsset as RiveImageAsset :
78- decodeAndApply ( onMain : true ,
66+ decodeAndApply (
7967 decode: { factory. decodeImage ( data) } ,
8068 apply: { imageAsset. renderImage ( $0) } ,
8169 completion: completion)
8270 case let fontAsset as RiveFontAsset :
83- decodeAndApply ( onMain : false ,
71+ decodeAndApply (
8472 decode: { factory. decodeFont ( data) } ,
8573 apply: { fontAsset. font ( $0) } ,
8674 completion: completion)
8775 case let audioAsset as RiveAudioAsset :
88- decodeAndApply ( onMain : false ,
76+ decodeAndApply (
8977 decode: { factory. decodeAudio ( data) } ,
9078 apply: { audioAsset. audio ( $0) } ,
9179 completion: completion)
0 commit comments