IOS 가 병렬 스 레 드 를 만 드 는 인 스 턴 스 상세 설명
병렬 스 레 드 만 들 기
메 인 스 레 드 는 일반적으로 UI 인터페이스 와 사용자 의 상호작용 을 처리 합 니 다.다른 일 은 일반적으로 다운로드,계산 등 다른 라인 으로 처리 해 야 한다.
지금 은 3 개의 스 레 드 를 간단하게 만 들 고 각각 1-1000 을 인쇄 합 니 다.편 의 를 위해 스 레 드 3 은 메 인 스 레 드 에 놓 고 실 행 됩 니 다.
- (void) firstCounter{
@autoreleasepool {
NSUInteger counter = 0;
for (counter = 0;
counter < 1000;
counter++){
NSLog(@"First Counter = %lu", (unsigned long)counter);
}
}
}
- (void) secondCounter{
@autoreleasepool {
NSUInteger counter = 0;
for (counter = 0;
counter < 1000;
counter++){
NSLog(@"Second Counter = %lu", (unsigned long)counter);
}
}
}
- (void) thirdCounter{
NSUInteger counter = 0;
for (counter = 0;
counter < 1000;
counter++){
NSLog(@"Third Counter = %lu", (unsigned long)counter);
}
}
- (void)viewDidLoad {
[super viewDidLoad];
[NSThread detachNewThreadSelector:@selector(firstCounter)
toTarget:self
withObject:nil];
[NSThread detachNewThreadSelector:@selector(secondCounter)
toTarget:self
withObject:nil];
/* Run this on the main thread */
[self thirdCounter];
}
thirdCounter 함수 가 단독 스 레 드 에서 실행 되 지 않 았 기 때문에 자동 으로 풀 을 풀 필요 가 없습니다(autorelease pool).이 방법 은 응용 프로그램의 메 인 스 레 드 에서 실 행 됩 니 다.모든 Cocoa Touch 프로그램 이 자동 으로 실 행 됩 니 다.이 메 인 스 레 드 에 자동 방출 탱크 를 만 듭 니 다.
코드 의 마지막 에 detachNewThreadSelector 를 호출 하여 첫 번 째 카운터 와 두 번 째 계산 기 를 독립 된 스 레 드 에서 실행 합 니 다.현재 프로그램 을 실행 하면 콘 솔 창 에서 다음 과 같은 정 보 를 볼 수 있 습 니 다.
Second Counter = 921
Third Counter = 301
Second Counter = 922
Second Counter = 923
Second Counter = 924
First Counter = 956
Second Counter = 925
Counter = 957
Second Counter = 926
First Counter = 958
Third Counter = 302
Second Counter = 927
Third Counter = 303
Second Counter = 928
이 세 개의 타 이 머 는 동시에 작 동 되 고 그들 이 출력 한 내용 은 무 작위 로 교체 되 었 음 을 알 수 있다.모든 스 레 드 는 autorelease pool 을 만들어 야 합 니 다.autorelease pool 이 release 되 기 전에 autorelease pool 은 autorelease 대상 에 대한 인용 을 계속 가지 고 있 습 니 다.인용 메모리 관리 환경 에서 이것 은 매우 중요 한 메커니즘 이다.예 를 들 어 코코아 터치 의 대상 은 autoreleased 될 수 있다.언제든지 대상 인 스 턴 스 를 만 들 때 이 대상 의 인용 수 는 1 이지 만 만 만 만 든 autorelease pool 대상 이 release 되 었 을 때 autorelease 대상 도 release 메 시 지 를 보 냅 니 다.이때 도 인용 계수 가 1 이면 대상 은 삭 제 됩 니 다. 모든 스 레 드 는 이 스 레 드 의 첫 번 째 생 성 대상 으로 autorelease pool 을 만들어 야 합 니 다.만약 이렇게 하지 않 는 다 면,이렇게 하지 않 으 면,라인 이 종 료 될 때,라인 에 분 배 된 대상 에 게 메모리 유출 이 발생 할 것 이다.더 잘 이해 하기 위해 서 다음 코드 를 살 펴 보 겠 습 니 다.
- (void) autoreleaseThread:(id)paramSender{
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *filePath = [mainBundle pathForResource:@"AnImage"
ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:filePath];
/* Do something with the image */
NSLog(@"Image = %@", image);
}
- (void)viewDidLoad {
[super viewDidLoad];
[NSThread detachNewThreadSelector:@selector(autoreleaseThread:)
toTarget:self
withObject:self];
}
,, :
*** __NSAutoreleaseNoPool(): Object 0x5b2c990 of
class NSCFString autoreleased with no pool in place - just leaking
*** __NSAutoreleaseNoPool(): Object 0x5b2ca30 of
class NSPathStore2 autoreleased with no pool in place - just leaking
*** __NSAutoreleaseNoPool(): Object 0x5b205c0 of
class NSPathStore2 autoreleased with no pool in place - just leaking
*** __NSAutoreleaseNoPool(): Object 0x5b2d650 of
class UIImage autoreleased with no pool in place - just leaking
위의 정 보 는 우리 가 만 든 autorelease 의 UIImage 인 스 턴 스 가 메모리 유출 을 일 으 켰 음 을 보 여 줍 니 다.또한 FilePath 와 다른 대상 도 유출 되 었 습 니 다.이것 은 우리 의 스 레 드 에서 시작 할 때 autorelease pool 을 만 들 고 초기 화하 지 않 았 기 때 문 입 니 다.다음은 정확 한 코드 입 니 다.메모리 유출 이 없 는 지 테스트 해 보 세 요.
- (void) autoreleaseThread:(id)paramSender{
@autoreleasepool {
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *filePath = [mainBundle pathForResource:@"AnImage"
ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:filePath];
/* Do something with the image */
NSLog(@"Image = %@", image);
}
}
이상 은 IOS 병발 라인 에 관 한 실례 를 사용 합 니 다.의문 이 있 으 시 면 댓 글 을 달 아 토론 하 셔 도 됩 니 다.함께 발전 하 셔 서 감사합니다. 읽 어 주 셔 서 감사합니다. 도움 이 되 셨 으 면 좋 겠 습 니 다.본 사이트 에 대한 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
IOS에서 ReplayKit 및 RTC 사용 방법응용된 소리와 아나운서의 소리를 포함한다.이 두 가지 수요를 감안하여 우리는 스크린 공유를 하는 생방송에 필요한 미디어 흐름을 간단하게 분석할 수 있다. 만약 우리가 Audio App과 Audio Mic를 두 개의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.