IOS 8.3中的UIDatePicker内存泄漏

IOS 8.3中的UIDatePicker内存泄漏,ios,objective-c,memory-leaks,Ios,Objective C,Memory Leaks,我发现UIDatePicker在运行IOS 8.3的iPad上用于popover时内存泄漏。每次日期选择器弹出然后被解除时,我都会收到大约5K的多个内存泄漏。泄漏的对象是NSDateComponents,负责的帧是[\u UIDatePickerMode\u YearlessyEarformon:] 我已经编写了一个简单的测试应用程序来演示这个问题()。我已经包括了一个UIPopoverController选项和一个UIPopoverPresentationController选项,但是使用哪一

我发现UIDatePicker在运行IOS 8.3的iPad上用于popover时内存泄漏。每次日期选择器弹出然后被解除时,我都会收到大约5K的多个内存泄漏。泄漏的对象是NSDateComponents,负责的帧是[\u UIDatePickerMode\u YearlessyEarformon:]

我已经编写了一个简单的测试应用程序来演示这个问题()。我已经包括了一个UIPopoverController选项和一个UIPopoverPresentationController选项,但是使用哪一个似乎并不重要

我是做错了什么,还是有解决办法,还是需要等待苹果的修复?如果是后者,那么有人能建议我使用第三方控件来代替UIDatePicker吗

下面是我用来弹出日期选择器的代码

头文件

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIPopoverControllerDelegate,
                                              UIPopoverPresentationControllerDelegate>


@end

我有同样的问题:。似乎是错误。如果picker中有一个bug,那么每个iOS应用程序都会受到影响,因此苹果应该尽快修复它。你给他们发了这个错误吗?是的,我已经报告了。苹果要求我检查它是否在IOS 9测试版中,但不幸的是,我还没有时间这么做。顺便说一句,这个问题只会在您直接通过故事板设置选择器值时重现。我也发布了这个bug。
#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) UIPopoverController *ios7Popover;

- (IBAction)datePickerPopupIOS7:(UIButton *)sender;
- (IBAction)datePickerPopupIOS8:(UIButton *)sender;

@end

@implementation ViewController

// helper - returns a view controller containing a date picker for use in a
// popup
+ (UIViewController *)buildDatePickerViewController
{
    CGRect frame = CGRectMake(0, 0, 350, 216);

    UIViewController *viewController = [[UIViewController alloc]init];
    viewController.preferredContentSize = frame.size;
    UIDatePicker *datepicker = [[UIDatePicker alloc]initWithFrame:frame];
    datepicker.datePickerMode = UIDatePickerModeDate;
    datepicker.hidden = NO;
    datepicker.date = [NSDate date];
    [viewController.view addSubview:datepicker];
    return viewController;
}

// popup date picker using UIPopoverController (IOS7 compatible)
- (IBAction)datePickerPopupIOS7:(UIButton *)sender
{
    UIViewController *viewController = [ViewController buildDatePickerViewController];

    self.ios7Popover = [[UIPopoverController alloc]initWithContentViewController:viewController];
    self.ios7Popover.delegate = self;
    [self.ios7Popover presentPopoverFromRect:sender.frame
                                      inView:self.view
                    permittedArrowDirections:(UIPopoverArrowDirectionUp|UIPopoverArrowDirectionDown| UIPopoverArrowDirectionLeft|UIPopoverArrowDirectionRight)
                                    animated:YES];
}

// popup date picker using UIPopoverPresentationController (IOS8 or later required)
// Thanks to http://stackoverflow.com/a/26944036/1764243 for how to do this
- (IBAction)datePickerPopupIOS8:(UIButton *)sender
{
    if ([UIPopoverPresentationController class])
    {
        UIViewController *viewController = [ViewController buildDatePickerViewController];

        UINavigationController *destNav = [[UINavigationController alloc] initWithRootViewController:viewController];
        destNav.modalPresentationStyle = UIModalPresentationPopover;
        UIPopoverPresentationController *popover = destNav.popoverPresentationController;
        popover.delegate = self;
        popover.sourceView = self.view;
        popover.sourceRect = [sender frame];
        destNav.navigationBarHidden = YES;
        [self presentViewController:destNav animated:YES completion:nil];
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Not supported"
                                                        message:@"UIPopoverPresentationController not supported in this version of IOS"
                                                       delegate:nil
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles:nil];
        [alert show];
    }
}

#pragma mark - UIPopoverControllerDelegate methods

 - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
    self.ios7Popover = nil;
}

@end