본문 바로가기

분류 전체보기3

(Swift, Objective-C) Preprocessor 회사에서 개발할 때 사용해야 하는 서버 주소와 배포된 제품이 사용해야 하는 서버 주소가 다릅니다. 매번 서버 주소를 수동으로 바꿔야 하므로, 실수로 개발 서버 주소가 입력된 상태로 배포되거나, 개발할 때 공인 서버 주소를 사용하는 문제가 발생할 수 있습니다. 또한, 매번 서버 주소를 바꾸는 작업은 귀찮기도 합니다.이러한 문제를 해결하기 위해 Preprocessor(전처리기)를 사용해보았습니다.Preprocessor 전처리기Preprocessor는 소스 코드를 컴파일하기 전에 코드의 특정 부분을 처리하는 단계입니다. 주로 매크로 정의, 조건부 컴파일, 파일 포함 등과 같은 작업을 수행합니다. Preprocessor는 컴파일러의 일부로 작동하며, 컴파일 전에 코드를 전처리하여 컴파일러가 실제로 컴파일할 코드.. 2024. 7. 28.
GCD와 Swift Concurrency를 통한 비동기 처리 성능 비교 회사 코드리뷰 시간에 스트레스 테스트에 대한 이야기를 나누던 중, 비동기 처리가 포함된 메서드가 많이 반복 호출되면 일정 스레드 개수부터 오히려 성능이 감소한다는 얘기를 들었습니다. 비동기 처리를 통해 성능상의 이점을 가져올 수 있다고 생각했는데, 왜 일정 구간 이상 넘어가면 오히려 성능이 감소하는지 궁금해서 찾아봤습니다.Swift에서는 대표적으로 GCD와 Swift Concurrency를 통해 비동기 처리를 할 수 있습니다.GCD (Grand Central Dispatch)GCD를 통해 스레드를 일정 개수 이상 만들면 급격히 속도가 느려지는 현상이 발생합니다. 이러한 현상의 이유는 Thread Explosion이 발생하기 때문입니다.Thread Explosion: 스레드의 수가 많아짐에 따라 퍼포먼스(.. 2024. 7. 25.
TableView reloadData vs insertRows 사용 계기이번에 회사에서 제품 개선을 하던 중 간헐적으로 크래시가 발생하는 문제가 있었습니다. TableView를 사용하여 UI를 구성했고, 특정 프로그램이 제대로 동작하지 않는 이유를 진단하는 프로그램입니다. 진단을 시작하면 빠르게 진단 로그가 TableView에 업데이트됩니다. 기존에는 reloadData() 메서드를 통해 UI를 업데이트하고 있었는데, UI가 업데이트되는 동안 지속적으로 빠르게 데이터가 추가됐기 때문에 충돌이 발생했던 것입니다.해결 방법이러한 문제를 해결하는 과정에서 insertRows()라는 메서드를 알게 되었습니다.tableView.beginUpdates()tableView.insertRows(at: [newIndexPath], with: .automatic)tableView.e.. 2024. 7. 21.