[220826] TIL
Taehyeon-Kim opened this issue · 6 comments
Taehyeon-Kim commented
- 이제 뷰에 대해서 달라지는 것은 거의 없다. 레이아웃 짜는 것은 거의 동일하고, 고려해야 할 부분은 Dynamic하게 들어오는 데이터를 어떻게 처리하고 관리할 수 있을지를 고민하는 것이 더 좋을 것 같다.
- Realm, TableView 갱신, TableView 로드
Taehyeon-Kim commented
삭제 시 문제 발생
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let favorite = UIContextualAction(style: .normal, title: "삭제") { action, view, completion in
// - 프로퍼티로 관리
// - 1. 데이터에 대한 정확성
// - 2. 가독성
let task = self.tasks[indexPath.row]
// 삭제시 같은 데이터에 대해 동시에 접근하다보면 문제가 발생할 수 있음
// - Record -> Image (문제 발생)
// - Image -> Record (순서 변경 시 문제 해결) => 근본적인 해결책은 아님.
self.removeImageFromDocument(fileName: "\(task).jpg")
try! self.realm.write {
self.realm.delete(task)
}
self.readDiary()
}
return UISwipeActionsConfiguration(actions: [favorite])
}
Taehyeon-Kim commented
tableView.beginUpdates()
tableView.endUpdates()
Taehyeon-Kim commented
- Realm은 Table(데이터)을 자동으로 동기화하고 있다. 그렇기 때문에 View를 갱신하기만 하더라도 데이터를 뷰에 정상적으로 반영할 수 있다.
- 정렬 또는 필터 등을 사용했을 때는 새롭게 만들어진 인덱스, 레코드로 가져올 필요가 있기 때문에 fetchRealm(custom function)으로 새롭게 데이터를 로드해 올 필요가 있다.
Taehyeon-Kim commented
데이터베이스 코드에 대한 정리
필요성이 느껴진다면 코드를 개선해보자.
문제 상황
- 뷰 컨트롤러 여기저기에 코드가 너무 산재되어 있다.
- 뷰 컨트롤러가 더 많아지는 순간 어떻게 해야할까
- 새로운 컬럼이 추가된다거나 컬럼의 이름이 변경되어야 한다면, 테이블명이 변경되어야 한다면 모든 뷰 컨트롤러의 코드가 수정되어야 한다.
Repository Pattern
- Protocol로 필요한 메서드를 모두 만들어준다.
- 의존성 주입
Taehyeon-Kim commented
최적화
https://github.com/apple/swift/blob/main/docs/OptimizationTips.rst
Swift Optimization Level
Release(Production Mode)일 때는 최적화 필요
- Onone
- O
- OSize
WMO(Whole Module Optimization)
전체 모듈 최적화
- WMO는 자동으로 적용되어 있음
- WMO를 해제하면 private 키워드가 결국 의미 없어짐