본문 바로가기

iOS/궁금증5

[iOS] ARC_객체 수명, weak와 unowned 차이 Swift에서 struct와 같은 값 타입이 아니라, class와 같은 참조 타입을 사용하면 참조 카운트, Reference Count가 발생하게 됩니다. 이는 애플에서 메모리를 관리하는 방법으로 메모리를 할당하거나, 참조할 때 카운트를 증가시키고 사용을 완료하면 감소시킵니다.Objective -C에서는 이를 개발자가 직접 관리했었고, 그것을 MRC Manual Reference Counting 이라고 부릅니다.그리고 현재 Swift에서는 직접적으로 참조 카운트를 삽입하고 해제하는 코드를 작성할 필요 없습니다. complier가 컴파일 타임에 자동으로 구문 분석을 통해 알아서 관련 코드를 삽입하여 메모리 관리를 해주는데 이를 ARC Automatic Reference Counting이라고 합니다.. 2024. 3. 21.
[iOS] Swift의 컴파일러 _ LLVM ❤️ Swift Compiler _ LLVM LLVM은 2000년 일리노이 대학에서 Chris Lattner 외 몇 명으로 구성된 연구 팀에서 프로그래밍 언어의 정적 및 동적 컴파일을 모두 지원할 수 있는 현대적인 컴파일 전략을 제공하기 위한 연구 프로젝트로 시작되었다. intermediate / binary 기계 코드를 구성, 최적화, 생성하는 데 사용되는 라이브러리로 프로그래머가 작성한 코드를 컴퓨터가 읽을 수 있는 intermediate, binary 코드로 컴파일 하는데 사용된다. 📒 컴퓨터의 하드웨어는 Binary Code만 읽을 수 있다. 때문에 우리가 작성한 코드들을 하드웨어가 읽을 수 있게 바꿔주는 작업을 거쳐야 하는데 이때 Intermediate Representation, 즉 중간표현을.. 2024. 3. 12.
[NSCache&URLCache]왜 이미지 파일이 URLCache에서 메모리가 아닌 디스크에 저장될까? 데이터들은 어디에 저장되고 어떻게 사용될까? 먼저 하드 디스크에 우리의 데이터들이 전부 저장된다. 때문에 하드 디스크는 용량이 매우 크고, 기억을 하는 것에 치중되어 있다. RAM, 메모리는 그러한 하드 디스크에서 앱을 실행하는데에 필요한 중요 데이터들을 들고 있다. 그러나 여전히 내용은 방대하고, RAM은 디스크보단 기억할 수 있는 양이 적고, CPU와 가까워서 빠르지만 어찌 되었건 기억을 하는 것에만 능력이 치중되어 있다. CPU는 RAM에서 받은 데이터들을 이용해 앱을 실행한다. 기억보다는 성능이 중요해, 꾸준하게 성능이 업그레이드 되어 왔다. 때문에 RAM과 CPU는 기억과 성능으로 각자의 목적이 다르기에 서로서로 성능차이가 점점 심하게 나게 된다. RAM이 CPU를 쫓아가지 못해 CPU가 RAM.. 2024. 1. 28.
[UIKit]loadView에 view는 언제 할당될까? 코드베이스로 짠 코드에서 실험해 본 내용이다. 예상으로는, super.loadView()가 실행되기 전까지는 view가 nil이기 때문에 값이 없을 것이라고 생각했다. 때문에 LLDB로 view를 loadView() 함수 내부에서 찍어보았다. 그런데 예상과는 다른 일이 있었다. super.loadView()가 불리기 전에 po view로 찍어보니, loadView와 loadView끝이 찍히더니, 값이 뜨는 것이다! 참고로 옆에 UIViewController의 view는 (id) 0x0으로 할당되어 있지 않았다. 오류인가? 왜 view가 찍히지? 그래서 loadView()를 여러번 찍어보고 하나씩 내려가면서 po view를 찍어보니, 매번 새로운 view가 출력되었다. If you access this p.. 2024. 1. 27.
[Swift]super.init()이 반드시 필요했던 경우 super.init()에 대해서 이것저것 찾아보다 신기한 경우를 찾았다. class A { init(some: String) { print("a") } } A와 같이 매개변수가 있는 init의 경우에는, 상속을 해서 내부에 변화를 줄 때 class B: A { override init(some: String) { super.init(some: some) print("b") } } 반드시 super.init을 불러야 한다는 에러 메세지가 떴다. 2단계 초기화에서 보면, customize된 초기화는 1. superClass와 subclass가 있을 때 subClass 초기화 2. superClass 초기화 순으로 올라간 후 3. superClass에서부터 값이 할당 되는 과정을 거친다. 이처럼 overrid.. 2023. 11. 8.