본문 바로가기
반응형

iOS24

UIView 관련 메서드 정리 setNeedsLayout(): 다음 업데이트 사이클에 layoutSubviews() 호출 layoutSubviews는 View의 layout 이 변화했다는 유일한 콜백 layoutIfNeeded(): 레이아웃 업데이트가 대기상태일 경우, 즉시 해당 레이아웃을 업데이트 = 바로 layoutSubviews() 호출, 단 시스템이 판한하여 변화가 있어야만 호출 됨 setNeedsDisplay(): 다음주기에서 draw 메서드를 통해 뷰를 다시 그려줘야 함을 시스템에게 알림. 2023. 6. 21.
iOS 정적 링킹, 동적 링킹 정적링킹 링커가 프로그램이 필요로 하는 부분을 라이브러리에서 찾아 실행파일에다 복사 실행 파일 내에 라이브러리 코드가 저장되어 메모리가 큼 동적링킹 라이브러리가 필요할 때 라이브러리 메모리로 점프해 실행한 후 다시 돌아옴 메모리는 아낄 수 있지만, 먼 거리로 점프해야해서 성능상 좋지 않음(overhead) iOS 에서 embed = 참조 => 동적 Do not embed(복사) => 정적 .a 정적 라이브러리 2023. 6. 20.
Swift, Objective-C 함께 사용하기 Framework 안에서는 Bridging-Header를 설정할 수 없다. 프레임워크를 만들 때 생성되는 프레임워크명.h 헤더 파일에 Objective-C Header을 import 해줘야 한다. Build Phase에서 헤더 파일들을 Public으로 이동시켜줘야 사용 가능하다. Include of non-modular header inside framework module 에러는 헤더 파일이 Public가아닌 Project 또는 Private일 때 나타난다. Objective-c 파일에서는 외부 라이브러리 Objective-c 헤더 파일 참조 시 헤더파일이 프로젝트 내에 없더라도 참조가 가능했지만, Swift파일에서는 참조가 불가능했다. (참조: https://devshin93.tistory.com/3.. 2023. 6. 20.
[iOS] Thread Sanitizer을 이용한 Race Condition (경쟁 상태) 확인 개발을 진행하면서 어떤 데이터에 접근할 때 크래쉬가 발생하여, 버그를 찾던 중 경쟁 상태 문제임을 확인하였습니다. 경쟁 상태란 공유 자원에 여러 프로세스 또는 스레드가 동시에 접근할 때 결과값에 영향을 줄 수 있는 상태를 의미합니다. Xcode의 Thread Sanitizer을 이용하면 멀티스레딩 환경에서 하나의 자원에 접근할 때 발생하는 Race Condition문제를 확인할 수 있는데요, 이해하기 쉽도록 어떠한 상황에서 경쟁 상태가 발생되는지 간략하게 정리해봤습니다. Thread Sanitizer 설정 방법 Product -> Scheme -> Edit Scheme에서 아래와 같이 Thread Sanitizer을 체크합니다. 경쟁 상태 구현 1. test() 함수 내부에서 비동기로 메인 스레드와 글로.. 2023. 1. 27.
Xcode 빌드 멈춤 Xcode 빌드가 멈춰서 진행되지 않는다면, 최근에 수정했던 코드를 유심히 살펴봐야 합니다. Show the Report navigator(comman+9)로 log를 확인하여, 빌드가 진행되지 않는 .swift 파일을 찾아 범위를 좁힐 수 있습니다. 저의 경우 아래 내용이 원인이었습니다. 코드를 작성하다 보니 CGFloat타입의 값을 Double타입의 변수에 대입하는 일이 발생되었는데, 컴파일러에서 오류를 나타내어주지 않고, 빌드가 오랜 시간 지나도 끝나지 않았습니다. 타입의 값을 일치시켜주었더니 문제가 해결되었습니다. 괜히, 이것저것 Build Setting 부분을 건드리며 많은 삽질의 시간을 보냈습니다. 여러분도 세팅 부분을 건드린 적이 없는데, 이유 없이 빌드가 끝나지 않는다면 제 글을 참고해보시.. 2022. 1. 14.
반응형