setOrientation 造成前后台通知回调两次

    if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
        SEL selector = NSSelectorFromString(@"setOrientation:");
        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
        [invocation setSelector:selector];
        [invocation setTarget:[UIDevice currentDevice]];
        int val = orientation;
        [invocation setArgument:&val atIndex:2];
        [invocation invoke];
    }

这段代码可以用来在用户已经锁定屏幕旋转的情况下, 进行强制旋转屏幕, 虽然这样用并不明智, 但是为了满足需求, 确实需要使用这样的方法, 在近期开发过程中发现了这样的问题, 在APP从后台切入前台后的这个方法中:

  - (void)applicationDidBecomeActive:(UIApplication *)application

进行强制屏幕旋转会造成

- (void)applicationDidBecomeActive:(UIApplication *)application;
- (void)applicationWillResignActive:(UIApplication *)application;
- (void)applicationDidEnterBackground:(UIApplication *)application;
- (void)applicationWillEnterForeground:(UIApplication *)application;

会造成这几个方法再执行一遍;

最终的现象就是前后台通知回调走了两次, 从而造成各种莫名其妙的bug, 所以建议这种调用苹果私有API的情况尽量不要出现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,679评论 25 708
  • 品牌:芦丹氏香调:木质东方调前调:牛奶 小麦中调:椰子 甘草 不凋花后调:桂花 杏 辛香料 檀香木 木质香 琥珀以...
    削削削削小萝卜阅读 737评论 0 1
  • 家在粤语里面就是“屋企”,所以说“屋企”就是家的意思。粤语其实是一种很古老的语言,曾经人说过被喻为语言里的“活化...
    一丝凉意阅读 3,001评论 1 0
  • 【1.7原文】 子夏曰:“贤贤易色,事父母能竭其力,事君能致其身,与朋友交言而有信。虽曰未学,吾必谓之学...
    jnvivian阅读 452评论 0 0