2013-06-10 1 views
0

이 tableView가 있고 사용자 지정 방식으로 셀을 작성하려고합니다. 내가하는 일은 셀에 하위 뷰를 추가하는 것입니다. 대리자의 스레드 안에 내 셀을 작성하는 방법은 무엇입니까?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if(cell == nil) 
    { 
     cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease]; 
    } 
    else 
    { 
     UIImageView* img=[UIImage imageNamed:@"abc.png"]; 
     [cell addSubview:img];  

     //processing the final cell takes time! 
    } 
    return cell; 
} 

그러나, 일부 과민 프레임 레이트 테이블의 응답에 영향을주지 않기 때문에, 나는 스레드로 셀의 모든 창조를 전달하고 싶습니다. 그 동안 잠시 동안 어떤 종류의 이미지를 넣고 싶습니다. 스레드가 완료되면 cell이 최종 셀로 업데이트됩니다.

정상적인 방법입니까?

그렇다면 스레드에서 셀을 어떻게 업데이트합니까?

모든 변수를 __block으로 정의해야합니까? 스레드에 들어가기 전에?

+0

의 이미지 크기가 큽니까? 스레드에서 셀을 업데이트 할 수 없습니다. 메인 스레드에서 이것을 미리 만들어야하지만 여전히 백그라운드 스레드에서 임의의 조작을 수행하고 메인 스레드에서 업데이트를 호출 할 수 있습니다. – Ashim

+0

http://stackoverflow.com/questions/8087010/loading-image-in-uitableviewcell-asynchronously –

+0

새 XIB를 만들고 UITableViewCell을 끌어다 추가하십시오. 그런 다음 사용자 정의하십시오. 가장 좋은 방법입니다. –

답변

1

일부 지터가 프레임 속도가 테이블의 응답에 영향을주기 때문에이 모든 셀 생성을 스레드로 전달하고 싶습니다.

UITableViewCell을 포함 UIKit의 대부분은, 스레드 안전하지 않습니다. Apple 설명서에서 :

대부분의 경우 UIKit 클래스는 응용 프로그램의 주 스레드에서만 사용해야합니다. 이는 UIResponder에서 파생되거나 응용 프로그램의 사용자 인터페이스를 조작하는 것과 관련하여 특히 그렇습니다.

... UIKit의 그리기 및 그래픽 컨텍스트 방법은 스레드로부터 안전합니다. 2 차 스레드에서 셀을 생성하는 것은 정말 좋은 생각입니다. 당신은 이것을하고 싶지 않습니다.

셀을 테이블 뷰로 효율적으로 만들고 그리는 방법이 많이 있습니다 - 누군가가 주석에서 지적한 것처럼 셀 생성시가 아니라 재사용시 UIImageView을 추가하는 것처럼 보입니다. 즉, 셀에 끊임없이 많은 이미지 뷰가 추가 될 것입니다. 이것은 분명히 좋은 생각이 아닙니다.

당신이 필요로하는 뷰가 이미 포함되어있는 UITableViewCell 하위 클래스를 만들거나 뷰 태그를 사용하여 생성하고 액세스 할 때 더 좋은 방법입니다.

+1

UIKit은 스레드로부터 안전하지 않습니다. UIKit은 스레드로부터 안전하지 않은 "절판 및 앱 실행"입니다. – CodaFi

+0

그리 멀지는 않을 것입니다. 그리기 (문자열, 이미지 및 그래픽 컨텍스트 임)는 iOS 4 이후부터 명시 적으로 스레드로부터 안전합니다. 나는 당신이하고있는 일을 모르는 경우 재난을 대비하는 방법이며 대다수의 프레임 워크는 여전히 주요 스레드로 남아 있음에 동의합니다. – lxt

+0

나는 그것들 중 어느 것도 실제로 UIKit에 속하지 않는다고 주장 할 것이다.NSString은 기초입니다. UIImage는 데이터 구조 (실제 데이터 또는 CGImage 컨텍스트)를 둘러싼 불투명 한 래퍼이며 UIKit 작업에는 여전히 배경 스레드가 안전하지 않습니다. 그래픽 컨텍스트는 Core Animation (코어 애니메이션 friendly), Core Graphics 및 Core Image를 지원합니다. – CodaFi

관련 문제