Fabric: Fixing incorrect retaining policy for RCTSurfacePreseter (crash in RCTNativeAnimatedModule)
Summary: This fixing a crash in RCTNativeAnimatedModule caused by accessing an `RCTSurfacePreseter` instance as "Objective-C runtime associated object" which was retained with `OBJC_ASSOCIATION_ASSIGN` policy. The documentation for `OBJC_ASSOCIATION_ASSIGN` says "Specifies a weak reference to the associated object." but it's a lie ( https://stackoverflow.com/questions/16569840/using-objc-setassociatedobject-with-weak-references) ). The policy is actually `ASSIGN` (aka `unsafe-unretained`). That's why it's crashing. We change that to `OBJC_ASSOCIATION_RETAIN` to retain the object (which meets the expectation of the interface of the category). We also should not have over-retaining issues because: * SurfacePresenter does not retain a Bridge or any object that can retain a Bridge; * SurfacePresenter is a long-living object, we don't recreate it during bridge reloading or stuff like that. Changelog: [Internal] Fabric-specific internal change. Reviewed By: sammy-SC Differential Revision: D19333869 fbshipit-source-id: 1ff03659a880f2742b909c5668c47144719eeee2
This commit is contained in:
Родитель
aa0ef15335
Коммит
5e6c61e449
|
@ -16,7 +16,7 @@
|
|||
|
||||
- (void)setSurfacePresenter:(id<RCTSurfacePresenterStub>)surfacePresenter
|
||||
{
|
||||
objc_setAssociatedObject(self, @selector(surfacePresenter), surfacePresenter, OBJC_ASSOCIATION_ASSIGN);
|
||||
objc_setAssociatedObject(self, @selector(surfacePresenter), surfacePresenter, OBJC_ASSOCIATION_RETAIN);
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
Загрузка…
Ссылка в новой задаче