#iphone #ios #uidatepicker
#iPhone #iOS #uidatepicker
Вопрос:
У меня чертовски много времени. У меня есть DatePicker, устанавливающий даты начала и окончания, например, Apple calendar. Я вылетаю без сообщений всякий раз, когда я нажимаю на DatePicker несколько раз. Я предполагаю, что у меня утечка памяти, но я не могу ее найти. пожалуйста, помогите … поскольку мне нужно получить к ним доступ несколькими способами, я превратил свои UIDatePicker и NSDateFormatter в ivars. BOOL устанавливаются при нажатии кнопок, и все настроено на прием нескольких касаний в IB.
работает нормально, если на DatePicker нажимается только один или иногда два раза.
.h
IBOutlet UIDatePicker *datePicker;
NSDateFormatter *dateFormatter;
NSDateFormatter *timeFormatter;
@property (nonatomic, retain) UIDatePicker *datePicker;
@property (nonatomic, retain) NSDateFormatter *dateFormatter;
@property (nonatomic, retain) NSDateFormatter *timeFormatter;
.m
@synthesize datePicker;
@synthesize dateFormatter, timeFormatter;
viewDidLoad:
NSDate *now = [[NSDate alloc] init];
[datePicker setDate:now animated:NO];
//known bug - hopefully fixed in 4.3
//[datePicker setMinimumDate:now];
[now release];
self.dateFormatter = [[NSDateFormatter alloc] init];
[self.dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[self.dateFormatter setTimeStyle:NSDateFormatterNoStyle];
formattedDateStringDate = [self.dateFormatter stringFromDate:datePicker.date];
NSLog(@"initdate %@", formattedDateStringDate);
self.timeFormatter = [[NSDateFormatter alloc] init];
[self.timeFormatter setDateStyle:NSDateFormatterNoStyle];
[self.timeFormatter setTimeStyle:NSDateFormatterShortStyle];
formattedDateStringTime = [self.timeFormatter stringFromDate:datePicker.date];
NSLog(@"initTime %@", formattedDateStringTime);
valueDidChange:
- (IBAction)changeDateInLabel:(id)sender
{
formattedDateStringDate = [dateFormatter stringFromDate:datePicker.date];
//NSLog(@"date %@", formattedDateStringDate);
formattedDateStringTime = [timeFormatter stringFromDate:datePicker.date];
//NSLog(@"time %@", formattedDateStringTime);
if (isStartDateSet)
{
startDateLabel.text = formattedDateStringDate;
startTimeLabel.text = formattedDateStringTime;
newDate = formattedDateStringDate;
newStartTime = formattedDateStringTime;
}
if (isEndDateSet)
{
endTimeLabel.text = formattedDateStringTime;
newEndTime = formattedDateStringTime;
}
}
для всех трех установлено значение nil
in viewDidUnload
, и все три выпущены dealloc
.
Ответ №1:
Вам необходимо изменить некоторые вещи перед дальнейшим расследованием:
self.dateFormatter = [[NSDateFormatter alloc] init];
После этого счетчик сохранения DateFormatter равен 2, 1 для alloc и 1 для свойства «сохранить». Измените его на то dateFormatter = [[NSDateFormatter alloc] init];
же самое для timeFormatter и, возможно, для DatePicker.
- После установки для элемента значения nil вы больше не сможете его освободить. Сделайте это наоборот.