2016-06-30 2 views
3

UITableView은 내 응용 프로그램의 주요보기로 사용합니다. 이 UITableView의 내용은 HTTP 요청 (JSON)을 통해 웹에서 한 번에 5 개씩로드됩니다. 이 요청 부분에는 성능 문제가 없습니다.UITableView의 성능 저하 원인을 확인하는 방법

그런 다음 셀은 JSON 데이터의 내용에 따라 프로그래밍 방식으로 생성됩니다. 예를 들어 JSON에 셀에 1이 포함되어 있다고 가정하면 UILabel, 1 UITextField 및 1 UIButton입니다. 나는 이것을 서브뷰로 추가하여 UITableViewCell을 수정한다. 세포의 초기 상태도 문제가 없습니다.

아래로 스크롤하면 새 항목이 웹에서로드되며,이 방법이 "더 많은 기능로드"기능을 트리거합니다.

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    let lastElement = data.jsonArray.count - 2 
    if indexPath.row == lastElement { 
     page += 1 
     getFeed() 
    } 
} 

그러나 아래로 스크롤하면 작은 동결과 지연이 있음을 알 수 있습니다. 왜 이런 작은 얼기가 발생하는지 나는 모른다.

지금 보이는 모습입니다. 에뮬레이터에서 이것을 기록했지만 실제 장치에서는 훨씬 더 나쁩니다.

여기서 어떻게해야할지 모르겠다. 조언? 감사.

+1

'cellForAtIndexPath :'에 코드를 게시 할 수 있습니까? – Proton

+0

매우 길고 복잡합니다. –

+0

'getFeed'는 사용자가 마지막으로 색인을 자주 스크롤 할 때 여러 번 호출합니다. 이미 실행중인 경우 메소드를 호출하지 못하게해야합니다. – Mahesh

답변

1
  • 당신이 & 배열에 저장 사전에 10 ~ 15 JSON 객체를 가져올 필요가 부드러운 당신이 경험을 각 셀이는 항상 lag.For 을 위해 서버에서 데이터를 가져 오는 것처럼. 새로운 요청을 할 때마다 배열의 객체를 추가하십시오.
  • 따라서 각 셀에 대한 서비스 요청을하지 않고 대신 요청을 10-15 셀 이후에하십시오. json 개체의 필드 수가 적은 경우이 값을 늘릴 수 있습니다. 이 (가) 새로 요청하면 하단에 회 전자를 표시 할 수 있습니다. 이를 위해
  • 매김으로 10 ~ 15

이 메커니즘도 알려져 배열 당신에게 오브젝트를 제공하는 서버 측 메커니즘을 확인해야합니다.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if ((indexPath.row == array.count - 1)) { 
     // This is the last cell 
     [self loadMore]; 
    } 
} 

// Load more 
- (void)loadMore { 

    //make service request for next page (Make sure your response contains next 10 objects) 
    //on response add those objects in the array 
    //reload table view 
    [self.tableView reloadData]; 
} 
+0

죄송합니다. 내 질문에 명확하지 않았습니다. 실제로 한 번에 5 개 항목을 가져옵니다. –

+0

이 방법을 5 개 개체에 대해서도 설정할 수 있습니다. 더 나은 청결을 위해 질문을 편집하십시오. –

+0

내 셀에서 모든보기를 제거했으며 페이지 매김 방법 만 남았습니다. 그들은 잘 작동하고 성능에 영향을주지 않는 것 같습니다. 문제는 어떻게 뷰가 셀에 추가되는지입니다. –