iOS-NSThread 멀티스레드
1. 스레드 생성 및 시작
하나의 NSThread 객체는 하나의 스레드를 나타냅니다.
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];
// , thread self run
//
- (void)setName:(NSString *)n;
- (NSString *)name;
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
//
[self performSelectorInBackground:@selector(run) withObject:nil];
상기 2가지 라인 생성 방식의 장단점 + 장점: 간단하고 빠르며 수동으로 start 방법을 호출하지 않아도 시스템이 자동으로 시작됩니다 + 단점: 라인에 대해 더 자세한 설정을 할 수 없습니다
2. 관련 사용 방법
주 스레드 관련 사용법
+ (NSThread *)mainThread; //
- (BOOL)isMainThread; //
+ (BOOL)isMainThread; //
현재 스레드 가져오기
NSThread *current = [NSThread currentThread];
스레드 이름
- (void)setName:(NSString *)n;
- (NSString *)name;
3. 라인의 상태
//
// [NSThread sleepForTimeInterval:2.0];
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];
//
[NSThread exit];
4. 자원 경쟁
여러 라인이 같은 자원에 동시에 접근할 수 있기 때문에
발생할 수 있다.이 문제를 해결하기 위해
사용 가능참고 사항:
6, 라인 간 통신
예:
일반적으로 하위 스레드에서 비교적 시간을 소모하는 조작, 예를 들어 그림의 다운로드를 한 다음에 메인 스레드에서 UI를 업데이트한다
NSURL *url = [NSURL URLWithString:@"http://b.hiphotos.baidu.com/image/pic/item/e4dde71190ef76c666af095f9e16fdfaaf516741.jpg"];
[self performSelectorInBackground:@selector(download2:) withObject:url];
- (void)download2:(NSURL *)url
{
//
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];
// ,
//[self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:YES];
// ,
//[self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
// ,
[self performSelector:@selector(showImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES];
//[self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:NO];
}
[self performSelectorInBackground:@selector(download2:) withObject:url];
[self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:YES];
[self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:NO];
[self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
[self performSelector:@selector(showImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES];
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.