GCD를 사용하여 다른 스레드의 인덱스로 이미지를로드하는 기능이 있습니다.컴파일러는 함수의 인수를 저장합니까?
그래서이 가정 할 수 있습니다 :
-(void)loadMainImageToIndex:(long)index
{
NSDictionary *dic=[mainData objectAtIndex:index];
NSString *userImageUrl=[dic objectForKey:@"url"];
NSURL *userUrl=[NSURL URLWithString:userImageUrl];
[self downloadImageWithURL:userUrl completionBlock:^(BOOL succeeded, NSData *tdata)
{
if (succeeded)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^
{
//do something here
dispatch_async(dispatch_get_main_queue(),^
{
//do something here that uses the index argument
을 그리고 난이 기능을 3 번 전화 : 첫 번째 호출 스레드 작업을 종료 할 때
[self loadMainImageToIndex:0];
[self loadMainImageToIndex:1];
[self loadMainImageToIndex:2];
질문입니다, 그리고 지점에 도착합니다 :
dispatch_async(dispatch_get_main_queue()
그는 index=0
에서 볼 것인가, 아니면 마지막 색인 wa를 볼 것인가? s called (==2)
?
질문은 그가 전체 기능을 복사하므로 끝날 때 방법을 시작한 인수를 기억할 수 있습니까? 또 다른 것은 3 번 동시에 호출하는 것은 나쁜 습관입니까?
감사합니다.
실제 전체 코드를 한 번에 제공 할 수 있습니까? 가정을 돕는 것은 다소 어렵습니다. – Rickye
쉽게 NSLog 인덱스를 테스트했습니다. – John
예 NSLog는 올바른 답을주었습니다. 그러나 GCD 전체가 나에게 작은 "블랙 박스"이기 때문에 거기에서 무슨 일이 일어나고 있는지 이해하고 싶었습니다. 그리고 지금 나는 :) – Curnelious