iOS 系统定位权限弹窗频繁弹出 - BUG

2021-04-23  本文已影响0人  天空中的球

在我们某个新来的同学发现一个其自己手机出现定位权限弹窗频繁出现的问题,iPhone 7 Plus, iOS 13.3.1,很是奇怪。

一、问题

定位权限弹窗

主要是频繁弹出,很是奇怪的,于是看了代码发现原因。。。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(appEnterForgroundNoti)
                                             name:UIApplicationDidBecomeActiveNotification
                                           object:nil];
- (void)appEnterForgroundNoti {
    [self checkLocationAuth];
}
case kCLAuthorizationStatusNotDetermined:
    [[CLLocationManager new] requestAlwaysAuthorization];
    break;

说白了就是监听了 UIApplicationDidBecomeActiveNotification 的通知不断去检验定位权限的,然后导致的
由于此处是 [CLLocationManager new] 没有实际上没有持有 CLLocationManager 就直接被销毁了,同时每次弹出这个定位权限又触发了 UIApplicationDidBecomeActiveNotification 的通知啦,所以循环在不断调用了

二、解决

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(appEnterForgroundNoti)
                                             name:UIApplicationWillEnterForegroundNotification
                                           object:nil];
case kCLAuthorizationStatusNotDetermined:
    [self.locationManger requestAlwaysAuthorization];
    break;

持有下 CLLocationManager, 另外更改下通知UIApplicationWillEnterForegroundNotification

三、注意点

注意的是系统弹窗会触发 UIApplicationDidBecomeActiveNotification 的点,之前没有注意到这个点。

PS:至于其他机型系统为啥没出现频繁的问题呢,猜测是由于[CLLocationManager new] 的被释放时机不同导致的,具体的原因暂时未知,持续观察中。

上一篇 下一篇

猜你喜欢

热点阅读