Skip to content

Commit 6d271eb

Browse files
committed
simplify
1 parent 3b90fd6 commit 6d271eb

1 file changed

Lines changed: 19 additions & 34 deletions

File tree

packages/react-native/React/Views/RCTViewController.m

Lines changed: 19 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,65 +9,51 @@
99

1010
#import <objc/runtime.h>
1111

12-
@interface RCTViewControllerAppearanceState : NSObject
13-
14-
@property (nonatomic, strong, readonly) NSHashTable<id<RCTViewControllerAppearanceListener>> *listeners;
15-
@property (nonatomic, assign) BOOL visible;
16-
17-
@end
18-
19-
@implementation RCTViewControllerAppearanceState
20-
21-
- (instancetype)init
12+
static void RCTSetViewControllerIsVisible(UIViewController *viewController, BOOL isVisible)
2213
{
23-
if (self = [super init]) {
24-
_listeners = [NSHashTable weakObjectsHashTable];
25-
}
26-
return self;
14+
objc_setAssociatedObject(
15+
viewController, @selector(reactViewControllerIsVisible), @(isVisible), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
2716
}
2817

29-
@end
30-
3118
@implementation UIViewController (RCTViewControllerAppearance)
3219

33-
- (RCTViewControllerAppearanceState *)reactViewControllerAppearanceState
20+
- (NSHashTable<id<RCTViewControllerAppearanceListener>> *)reactViewControllerAppearanceListeners
3421
{
35-
RCTViewControllerAppearanceState *state =
36-
objc_getAssociatedObject(self, @selector(reactViewControllerAppearanceState));
37-
if (!state) {
38-
state = [RCTViewControllerAppearanceState new];
22+
NSHashTable<id<RCTViewControllerAppearanceListener>> *listeners =
23+
objc_getAssociatedObject(self, @selector(reactViewControllerAppearanceListeners));
24+
if (!listeners) {
25+
listeners = [NSHashTable weakObjectsHashTable];
3926
objc_setAssociatedObject(
40-
self, @selector(reactViewControllerAppearanceState), state, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
27+
self, @selector(reactViewControllerAppearanceListeners), listeners, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
4128
}
42-
return state;
29+
return listeners;
4330
}
4431

4532
- (BOOL)reactViewControllerIsVisible
4633
{
47-
return [self reactViewControllerAppearanceState].visible;
34+
return [objc_getAssociatedObject(self, @selector(reactViewControllerIsVisible)) boolValue];
4835
}
4936

5037
- (void)reactAddViewControllerAppearanceListener:(id<RCTViewControllerAppearanceListener>)listener
5138
{
52-
RCTViewControllerAppearanceState *state = [self reactViewControllerAppearanceState];
53-
[state.listeners addObject:listener];
39+
[[self reactViewControllerAppearanceListeners] addObject:listener];
5440

55-
if (state.visible && [listener respondsToSelector:@selector(reactViewControllerDidAppear:animated:)]) {
41+
if (self.reactViewControllerIsVisible &&
42+
[listener respondsToSelector:@selector(reactViewControllerDidAppear:animated:)]) {
5643
[listener reactViewControllerDidAppear:self animated:NO];
5744
}
5845
}
5946

6047
- (void)reactRemoveViewControllerAppearanceListener:(id<RCTViewControllerAppearanceListener>)listener
6148
{
62-
[[self reactViewControllerAppearanceState].listeners removeObject:listener];
49+
[[self reactViewControllerAppearanceListeners] removeObject:listener];
6350
}
6451

6552
- (void)reactNotifyViewControllerDidAppear:(BOOL)animated
6653
{
67-
RCTViewControllerAppearanceState *state = [self reactViewControllerAppearanceState];
68-
state.visible = YES;
54+
RCTSetViewControllerIsVisible(self, YES);
6955

70-
for (id<RCTViewControllerAppearanceListener> listener in state.listeners.allObjects) {
56+
for (id<RCTViewControllerAppearanceListener> listener in [self reactViewControllerAppearanceListeners].allObjects) {
7157
if ([listener respondsToSelector:@selector(reactViewControllerDidAppear:animated:)]) {
7258
[listener reactViewControllerDidAppear:self animated:animated];
7359
}
@@ -76,10 +62,9 @@ - (void)reactNotifyViewControllerDidAppear:(BOOL)animated
7662

7763
- (void)reactNotifyViewControllerDidDisappear:(BOOL)animated
7864
{
79-
RCTViewControllerAppearanceState *state = [self reactViewControllerAppearanceState];
80-
state.visible = NO;
65+
RCTSetViewControllerIsVisible(self, NO);
8166

82-
for (id<RCTViewControllerAppearanceListener> listener in state.listeners.allObjects) {
67+
for (id<RCTViewControllerAppearanceListener> listener in [self reactViewControllerAppearanceListeners].allObjects) {
8368
if ([listener respondsToSelector:@selector(reactViewControllerDidDisappear:animated:)]) {
8469
[listener reactViewControllerDidDisappear:self animated:animated];
8570
}

0 commit comments

Comments
 (0)