Index: webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m |
diff --git a/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m b/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m |
index 168832d9ed08a2653f2595f4f425203bde3d5f7a..1d2aab48e852945fe25bd9d08a66ebb2fde9a0ac 100644 |
--- a/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m |
+++ b/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m |
@@ -16,12 +16,25 @@ |
#include "webrtc/rtc_base/checks.h" |
+@interface RTCUIApplicationStatusObserver () |
+ |
+@property(nonatomic, assign) BOOL initialized; |
+@property(nonatomic, assign) UIApplicationState state; |
+ |
+@end |
+ |
@implementation RTCUIApplicationStatusObserver { |
BOOL _initialized; |
dispatch_block_t _initializeBlock; |
UIApplicationState _state; |
+ |
+ id<NSObject> _activeObserver; |
+ id<NSObject> _backgroundObserver; |
} |
+@synthesize initialized = _initialized; |
+@synthesize state = _state; |
+ |
+ (instancetype)sharedInstance { |
static id sharedInstance; |
static dispatch_once_t onceToken; |
@@ -35,24 +48,27 @@ |
- (id)init { |
if (self = [super init]) { |
NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; |
- [center addObserverForName:UIApplicationDidBecomeActiveNotification |
- object:nil |
- queue:[NSOperationQueue mainQueue] |
- usingBlock:^(NSNotification *note) { |
- _state = [UIApplication sharedApplication].applicationState; |
- }]; |
- |
- [center addObserverForName:UIApplicationDidEnterBackgroundNotification |
- object:nil |
- queue:[NSOperationQueue mainQueue] |
- usingBlock:^(NSNotification *note) { |
- _state = [UIApplication sharedApplication].applicationState; |
- }]; |
+ __weak RTCUIApplicationStatusObserver *weakSelf = self; |
+ _activeObserver = [center addObserverForName:UIApplicationDidBecomeActiveNotification |
+ object:nil |
+ queue:[NSOperationQueue mainQueue] |
+ usingBlock:^(NSNotification *note) { |
+ weakSelf.state = |
+ [UIApplication sharedApplication].applicationState; |
+ }]; |
+ |
+ _backgroundObserver = [center addObserverForName:UIApplicationDidEnterBackgroundNotification |
+ object:nil |
+ queue:[NSOperationQueue mainQueue] |
+ usingBlock:^(NSNotification *note) { |
+ weakSelf.state = |
+ [UIApplication sharedApplication].applicationState; |
+ }]; |
_initialized = NO; |
_initializeBlock = dispatch_block_create(DISPATCH_BLOCK_INHERIT_QOS_CLASS, ^{ |
- _state = [UIApplication sharedApplication].applicationState; |
- _initialized = YES; |
+ weakSelf.state = [UIApplication sharedApplication].applicationState; |
+ weakSelf.initialized = YES; |
}); |
dispatch_async(dispatch_get_main_queue(), _initializeBlock); |
@@ -61,6 +77,12 @@ |
return self; |
} |
+- (void)dealloc { |
+ NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; |
+ [center removeObserver:_activeObserver]; |
+ [center removeObserver:_backgroundObserver]; |
+} |
+ |
- (BOOL)isApplicationActive { |
if (!_initialized) { |
long ret = dispatch_block_wait(_initializeBlock, |