mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
5e6c61e449
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
23 lines
592 B
Objective-C
23 lines
592 B
Objective-C
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#import "RCTSurfacePresenterStub.h"
|
|
|
|
@implementation RCTBridge (RCTSurfacePresenterStub)
|
|
|
|
- (id<RCTSurfacePresenterStub>)surfacePresenter
|
|
{
|
|
return objc_getAssociatedObject(self, @selector(surfacePresenter));
|
|
}
|
|
|
|
- (void)setSurfacePresenter:(id<RCTSurfacePresenterStub>)surfacePresenter
|
|
{
|
|
objc_setAssociatedObject(self, @selector(surfacePresenter), surfacePresenter, OBJC_ASSOCIATION_RETAIN);
|
|
}
|
|
|
|
@end
|