iOS 8 Only Memory Leak with UIAlertController or UIActionSheet

后端 未结 4 1210
余生分开走
余生分开走 2020-12-16 20:48

I\'m seeing a memory leak in iOS 8 in simulator when I do the following with UIActionSheet or UIAlertController. UIActionSheet uses UIAlertController in IOS 8 so the issues

相关标签:
4条回答
  • 2020-12-16 21:32

    I would suggest to use "UIAlertController" in iOS8. And dismiss the alertController object from the presented controller, while firing any event by "UIAlertAction" block.

    UIAlertController  *alertController = [UIAlertController alertControllerWithTitle:@"title"
    message:@"message"
    preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction  *alertAction = [UIAlertAction actionWithTitle:@"actionTitle"
    style:UIAlertActionStyleDefault
    handler:^(UIAlertAction *action) {
    //Do ur stuff
    [alertController dismissViewControllerAnimated:YES
                                        completion:NULL];
    }];
    [alertController addAction:alertAction];
    [self presentViewController:alertController
                           animated:YES
                         completion:NULL];
    
    0 讨论(0)
  • 2020-12-16 21:33

    This is no answer, but more evidence for the leak, that exceeds a comment. May it help to find a solution or workaround. The leak seems to be device specific on iPad 3/Retina!

    I have made some tests myself by overriding retain and release of the view-controller to show the leak in iOS 8.x

    See also: https://devforums.apple.com/message/1099577#1099577

    • LEAKY Devices: iPad 3 (A1416), iPad Air Simulator
    • GOOD Devices: iPhone 6 iOS 8.1.3, iPhone 4s with iOS 8.1.2

    AGC is the view-controller. The correct retain count should be 2.

    iPad Retina Simulator iOS 8.1 AND real iPad LEAK // second run ... this time with LEAK by selecting an option 12:56:50.929 SimplySolitaire[27643:473670] >>> WILL actionSheet showInView: retain = 2 12:56:50.930 SimplySolitaire[27643:473670] AGC retain == 3 12:56:50.950 SimplySolitaire[27643:473670] AGC retain == 4 12:56:50.951 SimplySolitaire[27643:473670] AGC retain == 5 12:56:50.951 SimplySolitaire[27643:473670] AGC retain == 6 12:56:50.951 SimplySolitaire[27643:473670] <<< DID actionSheet showInView: retain = 6 12:56:50.998 SimplySolitaire[27643:473670] AGC release = 5 12:56:51.042 SimplySolitaire[27643:473670] AGC release = 4 12:56:51.042 SimplySolitaire[27643:473670] AGC release = 3 // USER dismisses the action sheet with tapping a button (delegate is nil) 12:56:53.257 SimplySolitaire[27643:473670] AGC retain == 4 12:56:53.257 SimplySolitaire[27643:473670] AGC retain == 5 12:56:53.258 SimplySolitaire[27643:473670] AGC retain == 6 12:56:53.258 SimplySolitaire[27643:473670] AGC retain == 7 12:56:53.258 SimplySolitaire[27643:473670] AGC release = 6 12:56:53.259 SimplySolitaire[27643:473670] AGC release = 5 12:56:53.612 SimplySolitaire[27643:473670] AGC release = 4 12:56:53.612 SimplySolitaire[27643:473670] AGC release = 3 // <<<<<<<<<< LEAK should be 2 // the last release is missing, but only iOS system code has executed.

    iPad Retina Simulator iOS 8.1 AND real iPad, dismiss without LEAK 12:54:54.757 SimplySolitaire[27643:473670] >>> WILL actionSheet showInView: retain = 2 12:54:54.758 SimplySolitaire[27643:473670] AGC retain == 3 12:54:54.798 SimplySolitaire[27643:473670] AGC retain == 4 12:54:54.798 SimplySolitaire[27643:473670] AGC retain == 5 12:54:54.798 SimplySolitaire[27643:473670] AGC retain == 6 12:54:54.798 SimplySolitaire[27643:473670] <<< DID actionSheet showInView: retain = 6 12:54:54.845 SimplySolitaire[27643:473670] AGC release = 5 12:54:54.891 SimplySolitaire[27643:473670] AGC release = 4 12:54:54.891 SimplySolitaire[27643:473670] AGC release = 3 // NOW ... dismiss the action sheet without selection (delegate is nil) 12:55:05.643 SimplySolitaire[27643:473670] AGC retain == 4 12:55:05.644 SimplySolitaire[27643:473670] AGC retain == 5 12:55:05.644 SimplySolitaire[27643:473670] AGC retain == 6 12:55:05.644 SimplySolitaire[27643:473670] AGC retain == 7 12:55:05.645 SimplySolitaire[27643:473670] AGC release = 6 12:55:05.645 SimplySolitaire[27643:473670] AGC release = 5 12:55:05.996 SimplySolitaire[27643:473670] AGC release = 4 12:55:05.997 SimplySolitaire[27643:473670] AGC release = 3 12:55:05.997 SimplySolitaire[27643:473670] AGC release = 2 // this is a correct retain of 2

    0 讨论(0)
  • 2020-12-16 21:34

    This is an iOS bug.

    See Apple Bug Reporter issue 21005708, Memory leak in UIAlertController under ARC.

    0 讨论(0)
  • 2020-12-16 21:37

    I would suggest switching to UIAlertController. UIActionSheet is deprecated in iOS 8, so you might try giving it a shot and see if there's still the leak

    0 讨论(0)
提交回复
热议问题