티스토리 뷰

반응형

 

 

 


reloadData()

reloadData()는 테이블뷰의 인스턴스 메서드입니다. 테이블뷰 인스턴스에서 접근해서 사용할 수 있습니다. 

reloadData() 메서드는 테이블 뷰의 현재 보이는 전체 열(row), 섹션(section) 업데이트를 할 때 사용합니다.

reloadData() 메서드는 특정 열, 섹션의 부분적 업데이트가 아닌, 테이블뷰의 보이는 영역 전체를 업데이트 해줄 때 효율적입니다.

 

 


Declaration 
선언 방식

 

 


다시 말하자면, reloadData() 메서드는 테이블뷰의 인스턴스 메서드로, 위와 같이 구성되어 있습니다. 

해당 메서드를 갖고있는 타입은 UICollectionView, UITableView등이 있습니다. 이번 포스팅에서는 tableView를 기준으로 보도록 하겠습니다.

 

 

 


reloadData() 사용방법

섹션의 헤더뷰 / 푸터뷰, 셀, index 배열 등을 포함하는 테이블의 데이터를 reload 후 재구성 하려할 때 해당 메서드를 호출해서 사용할 수 있습니다. 

앞서 말했듯이, reloadData() 메서드는 업데이트 간 효율적인 방식을 사용하는데요.
이 때 테이블뷰의 전체 영역을 업데이트 하는 것이 아닌, 현재 보이는 열 만을 업데이트 해줍니다. 또한 reload 될 때의 결과에 대해 테이블은 자동적으로 오프셋을 조절합니다. 

또한 tableView가 reloadData() 메서드를 호출한 후
-> tableView가 갖고 있는 데이터를 완벽히 업데이트 했다면,
-> 이후 해당 tableView의 delegate(UITableViewDelegate), dataSource(UITableViewDataSource) 관련 메서드는 상황과 조건에 맞게 호출이 됩니다. 

그러므로, reloadData() 메서드의 호출과 연계한 세부 동작, 이벤트를 관리할때 이점을 염두하고 델리게이트, 데이터소스 메서드를 함께 활용하면 좋습니다. 

 

 


reloadData() 사용 간 주의사항

1) tableView의 행을 제거 및 삽입하는 작업을 할 때, reloadData() 메서드를 호출해서는 안됩니다. 특히 beginUpdates(), endUpdates()와 같은 메서드의 호출이 있을 때 애니메이션 블록 내에서 사용해서는 안됩니다. 

2) 테이블뷰의 보이는 영역 전제 가 아닌 일부만 업데이트/삽입/삭제 하고자 할 때에는 indexPath 배열을 사용해서 reloadRows(at:with:)로 업데이트 하거나, performBatchUpdates(_:completion)을 사용하는 등, reloadData() 메서드 대신 다른 방법을 사용할 수 있습니다.

3) 또한 reloadData() 메서드는 UI를 변화시키는 메서드로 반드시 메인스레드에서 동작해야 합니다. 
만약 클로져 등에서 백그라운드 스레드로 동작이 될 때는 DispatchQueue나 OperationQueue 등을 활용해서 메인 스레드(main thread)에서 동작하도록 해주어야 합니다. 

중요사항
tableView의 프로퍼티 중, hasUncommittedUpdates 값이 true라면, reloadData() 메서드를 호출해서는 안됩니다!

만약 해당 작업을 하게 되면 테이블뷰 내에서 reloadData가 실행 되기 전의 uncommitted 된 변화가 있다면 해당 사항들은 강제로 삭제됩니다. 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함