2014-01-07 2 views
0

스레드 기능으로 테스트했습니다. 그러나 프로그램은 항상 오류를 피드백합니다. 아마 오류가 스레드 함수의 인수와 관련이 있다고 생각하지만, 어떻게 해결해야할지 모르겠다. 미리 Thx! 코드는 다음과 같습니다 :iOS의 스레드 기능 매개 변수

-(void) doSomething:(id)p 
{ 
    if((int)p == 100) 
     NSLog(@"100"); 
    else 
     NSLog(@"101"); 
} 

int a = 100; 
[self performSelectorInBackground:@selector(doSomething:) withObject:a]; 
+0

명심 :적인 Cocos2D가 새 권투 표기법에 익숙하지 않은 당신은 매디의 대답 "이 랩 방법으로 혼란스러워하는 경우 백그라운드 스레드 – LearnCocos2D

답변

3

performSelectorInBackground:withObject:에 대한 문서를 읽으십시오. a은 개체가 아니며 원시 유형입니다.

값을 NSNumber으로 묶어야합니다.

-(void) doSomething:(NSNumber *)p 
{ 
    if([p intValue] == 100) 
     NSLog(@"100"); 
    else 
     NSLog(@"101"); 
} 

int a = 100; 
[self performSelectorInBackground:@selector(doSomething:) withObject:@(a)]; 

아니면 GCD를 사용할 수 있습니다 : withObject은 객체와 INT를 필요로

-(void) doSomething:(int)p 
{ 
    if(p == 100) 
     NSLog(@"100"); 
    else 
     NSLog(@"101"); 
} 

int a = 100; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    [self doSomething:a]; 
}); 
+0

의 노드에 액세스하거나 수정하면 안전하고 가능성이 충돌 스레드되지 않는다 NSNumber의 값 "인 경우,'@ (a)'는'[NSNumber numberWithInt : a]'의 문법적 설탕이다. – JeremyP

2

당신이

[self performSelectorInBackground:@selector(doSomething:) withObject:[NSNumber numberWithInt:a]]; 

같은 것을해야 원시적 데이터 형입니다.

+0

이 답변이 필요하지 않습니다 @rmaddy는 충분한 정보를 제공합니다. – Tirth

+3

그들은 단지 1 분 30 초 정도 떨어져 있습니다. @ Reformer; 그들은 거의 같은 시간에 답변을하기 시작했을 것입니다. –

+2

@Reformer 본질적으로 다른 답변을 게시하는 것은 불법이 아닙니다. 두 가지 답변을 조합하면 더 나은 이해를 얻을 수 있습니다. – JeremyP