iOS 메모리 화제: NSTimer 로 인해 dealloc 를 처리 할 수 없습니다.
1611 단어 iOS
직접 예 를 들다.
예 다운로드 주소:http://download.csdn.net/detail/androidbluetooth/9486863
ViewController 에서 다른 ViewController (LoginPage) 를 엽 니 다.
LoginPage.m
#import "LoginPage.h"
@interface LoginPage ()
@property (strong, nonatomic) IBOutlet UILabel *counterLabel;
@property (strong, nonatomic) NSTimer *timer;
@property (assign, nonatomic) int counter;
- (void)goLogin;
@end
@implementation LoginPage
- (void)dealloc
{
NSLog(@"LoginPage: dealloc");
}
- (void)viewDidLoad
{
[super viewDidLoad];
_counter = 0;
_timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self
selector:@selector(goLogin)
userInfo:nil repeats:YES];
}
- (void)goLogin
{
NSLog(@"LoginPage: goLogin.");
self.counter ++;
self.counterLabel.text = [NSString stringWithFormat:@"%i", self.counter];
}
@end
코드 는 이해 하기 쉽다.
NSTimer 는 1s 마다 goLogin 방법 을 실행 합 니 다.
LoginPage 가 닫 혔 을 때 dealloc 방법 을 사용 하 기 를 바 랍 니 다.
결과, 호출 되 지 않 았 습 니 다.
해결 방법, 다음 방법 을 추가 합 니 다.
- (void)viewDidDisappear:(BOOL)animated
{
if (nil != _timer) {
[_timer invalidate];
_timer = nil;
}
}
여기까지 오 면 쉽게 발견 할 수 있 는 문제 라 고 생각 할 지도 모른다.
경험 이 있 는 iOS 개발 자 에 게 이것 은 확실히 큰 문제 가 아니다.
그러나 코드 의 양 이 많아 서 문 제 를 제거 할 때 이 문제 의 존 재 를 반드시 알 아차 리 지 못 할 것 이다.
서로 격려 하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.