iOS 에서 스 레 드 를 만 드 는 방법 은 계속 작업 할 수 있 고 한 번 실행 하지 않 으 면 끝 납 니 다.
2524 단어 iOS_OC
http://www.dreamingwish.com/frontui/article/default/ios-multithread-program-runloop-the.html
어떻게 스 레 드 를 만 드 는 지, 계속 일 할 수 있 도록 요구 하 며, 한 번 실행 하지 않 고 끝 납 니 다.
@synthesize name;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(threadFunc) object:nil];
[thread start];
}
static bool over = NO;
- (void)threadFunc
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
while (YES) {
@synchronized(name){
name = @"Frank";
[NSThread sleepForTimeInterval:2];
if ([NSThread isMultiThreaded]) {
NSLog(@"%@ isMultiThreaded",name);
}
if (over) {
break;
}
}
}
[pool release];
}
이 스 레 드 종료:
a)break;
b)[thread cancel]
NSRunloop
run loop 은 이벤트 처리 순환 으로 끊임없이 할당 작업 과 입력 이 벤트 를 처리 합 니 다.run loop 을 사용 하 는 목적 은 스 레 드 를 일 할 때 일 하고 없 을 때 휴면 시 키 는 것 입 니 다.NSRunloop 은 하나의 스 레 드 가 활성 화 된 상 태 를 유지 할 수 있 으 며 즉시 소각 되 지 않 습 니 다.
다 중 스 레 드 에서 타 이 머 를 사용 하려 면 Runloop 을 켜 야 합 니 다. Runloop 을 켜 서 스 레 드 를 활성화 상태 로 유지 해 야 타이머 가 정상적으로 작 동 할 수 있 기 때 문 입 니 다.
- (void)viewDidLoad
{
[super viewDidLoad];
//self.view.backgroundColor=[UIColor blueColor];
[self performSelectorInBackground:@selector(multithread) withObject:nil];
}
-(void)multithread
{
NSLog(@"HE");
[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timeAction) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop]run];
}
-(void)timeAction
{
NSLog(@"HELLO");
}
1.3.4 Run Loop 종료
run loop 이 사건 을 처리 하기 전에 종료 할 수 있 는 두 가지 방법 이 있 습 니 다.
run loop 에 시간 초과 설정 run loop 정지 알림 설정 이 가능 하 다 면 첫 번 째 방법 을 추천 합 니 다.run loop 이 종료 되 기 전에 모든 정상 적 인 작업 을 수행 할 수 있 는 시간 초과 시간 을 지정 합 니 다. run loop 관찰자 에 게 메 시 지 를 보 내 는 것 을 포함 합 니 다.
CFRunLoop Stop 을 사용 하여 run loop 을 표시 하 는 것 은 시간 초과 사용 으로 인 한 결과 와 비슷 합 니 다.Run loop 은 남 은 모든 알림 을 보 내 고 종료 합 니 다.시간 초과 설정 과 달리 무조건 시작 하 는 run loop 에서 이 기술 을 사용 할 수 있 습 니 다.
run loop 의 입력 원 과 타 이 머 를 제거 하 는 것 도 run loop 을 종료 시 킬 수 있 지만, 이것 은 run loop 을 종료 하 는 믿 을 만 한 방법 이 아 닙 니 다.일부 시스템 루틴 은 필요 한 이 벤트 를 처리 하기 위해 run loop 에 입력 원 을 추가 합 니 다.코드 가 이러한 입력 원 을 고려 하지 않 기 때문에 시스템 루틴 에서 제거 하지 않 고 run loop 을 종료 할 수 있 습 니 다.