作業中のアプリの時計を作成しました。通常の時計から始まりますが(毎回1秒ずつカウント)、2秒ごと、4秒ごと、8秒ごとなど、20に達してアプリがクラッシュするまでフリーズします。 、xcodeの表示にエラーはなく、。もありませんRecieved Memory Warning
。
Instrumentsに行ったところ、時計を使用しているときに、アプリのメモリが驚くべき速度で増加していることがわかりました(ただし、どの速度でも驚くべき速度で増加しています)。問題は、メモリが非常に高くなる原因が正確に何であるかを理解できないことです。アプリはARCで実行されているので、何かをリリースすることを忘れなかったことを知っています。私が考えることができる唯一のことは、番号がロードされるたびに、それはメモリに保存され、決して解放されないということです。それがどういうことか、私にはわからない、そしてそれを修正する方法は私にはさらに少ない考えがあります。何ができるか教えてください。これが私のコードです:
-(void)updateTime {
calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
updateTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];
currentTime = [NSDate date];
dateComponents = [calendar components:unitFlags fromDate:currentTime];
year = [dateComponents year];
month = [dateComponents month];
day = [dateComponents day];
hour = [dateComponents hour];
minute = [dateComponents minute];
second = [dateComponents second];
if (hour >= 12) {
lblAMPM.text = @"PM";
} else {
lblAMPM.text = @"AM";
}
//if (isTwelveHour == YES) {
//make a 12 hrs clock instead of 24
if (hour >= 12) {
hour = 12 - (24-hour);
}
//}
//if midnight, show hour as 12 instead of 0
if (hour == 0) {
hour = 12;
}
if (second < 10) {
seconds = [NSString stringWithFormat:@"0%i", second];
} else {
seconds = [NSString stringWithFormat:@"%i", second];
}
if (minute < 10) {
lblTime.text = [NSString stringWithFormat:@"%i:0%i:%@", hour, minute, seconds];
} else {
lblTime.text = [NSString stringWithFormat:@"%i:%i:%@", hour, minute, seconds];
}
[lblDate setText:[NSString stringWithFormat:@"%d/%d/%d", month, day, year]];
}
- (void) updateDateFirst:(int)firstComponent setSecond:(int)secondComponent{
calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
updateTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];
currentTime = [NSDate date];
dateComponents = [calendar components:unitFlags fromDate:currentTime];
year = [dateComponents year];
month = [dateComponents month];
day = [dateComponents day];
[lblDate setText:[NSString stringWithFormat:@"%d/%d/%d", firstComponent, secondComponent, year]];
}
- (void)viewDidUnload {
lblTime = nil;
lblAMPM = nil;
lblDate = nil;
[super viewDidUnload];
}
参考までに、私は電話をかけupdateTimer
てviewDidAppear
います。