전체 글
-
[iOS] WebSafeForwarder forwardInvocation 크래시 - NSAttributed String html 내부 동작iOS 2023. 1. 13. 21:06
어느날 [_WebSafeForwarder forwardInvocation:] 라는 크래시가 발생했다. 이에 대해 구글링을 해보니 여러 Stack Overflow 글에서 NSAttributedString 의 메서드를 사용해서 html 을 파싱할 때 간헐적으로 발생하는 크래시인 것으로 보여 관련해서 iOS 에서 NSAttributedString 으로 html 을 파싱할 때 내부적으로 어떻게 동작하는지 확인하고, 왜 크래시가 발생하는지 확인했다. 1. iOS 내부 동작 NSAttributedString 생성자 initWithData:options:documentAttributes:error: 명시된 data 객체에서 attributed string을 생성하는 메서드. 디코딩 되지 않았을 경우 nil, 그 외의..
-
[iOS] ARM ArchitectureiOS 2023. 1. 13. 20:16
ARM Architecture ARM 아키텍처 컴퓨터 프로세서를 위한 RISC (Reduced Instruction Set Computing) 아키텍처의 일환. Advanced RISC Machines ARM 프로세서는 굉장히 적은 instruction, transistor 만을 필요로 하고, 크기가 작기 때문에 작은 기기에도 탑재 가능하다. 장점 내장된 보안성 높은 성능과 에너지 효율성 전세계적인 Ecosystem, 영향력 기능 Multiprocessing System : ARM 프로세서들은 하나 이상의 프로세서가 수행될 수 있는 multiprocessing 시스템을 지원한다. ARMv6K 는 하드웨어에서 4개의 CPU 를 돌릴 수 있게 지원하고 있다. Tightly Coupled Memory : AR..
-
[iOS] RunLoop 개념iOS 2023. 1. 13. 20:03
Run Loops Thread와 연관된 근본적인 infrastructure의 일부로, 작업을 스케줄링하거나 들어오는 이벤트들을 조합하는데 사용하는 이벤트 처리 loop Thread 가 진입하고, 들어오는 이벤트에 대해 대응하는 event handler 들을 실행하기 위해 사용하는 loop. Loop 내부에서는 이벤트들을 받고 설치된 handler 들을 호출하는 이벤트 처리 코드를 실행하기 위해 run loop 객체를 사용한다. 목적 : 작업이 있을 때 thread에서 수행하기. 수행해야 하는 작업이 있을 때 thread를 일하게 하고 작업이 없을 때 thread를 잠자게 한다. Run loop 가 하는 관리 작업은 완전히 자동적으로 이루어지지는 않는다. 개발자가 적절한 시점에 thread 에서 run l..
-
iOS 16 UITextView 이슈, TextKit 2iOS 2023. 1. 3. 22:57
iOS 16 TextView TextKit 이슈 문제 상황 같은 코드인데 os 버전에 따라 UITextView의 디자인이 다르게 나옴 아래와 같이 3줄짜리 UITextView가 있다. Text view에 경계선을 그리면 아래와 같다. 밑줄은 UITextView를 상속해서 custom subclass를 만들고, draw(_:) 메서드를 override 해서 그렸다. 이 text view는 줄 높이, 줄 간 간격, 폰트 등 다양한 수치가 각각 다 임의로 정의한 상태다. ✅ ~ iOS 15 iOS 15까지는 설정한 수치대에 맞게 텍스트가 어떻게 입력해도 정상적인 위치에 출력됐다. ❗️ iOS 16 같은 코드를 iOS 16 버전의 기기에서 수행한 화면은 다음과 같다. 확인된 문제만 해도 아래와 같다. 텍스트 위..
-
UML Diagram with SwiftCS/ETC 2022. 9. 30. 18:09
UML Class Diagram UML 클래스 다이어그램은 객체 지향 시스템을 구성하고 시각화하는데 사용되는 그래픽적 표현이다. UML은 Unified Modeling Language의 약어로, UML의 클래스 다이어그램은 구조적인 다이어그램으로 다음의 시스템 요소들을 표현한다. 클래스 클래스의 속성 연산(메서드) 객체간의 관계 이름에서부터 알 수 있듯이 객체 지향 시스템의 핵심이 되는 객체를 생성하기 위한 '클래스'와 그들의 능력, 객체간의 관계를 시각적으로 표현한다. Class란 Class가 무엇인지 모르고 클래스 다이어그램을 그릴 수는 없다. 클래스는 객체를 찍어낼 수 있는 틀이 된다. 클래스와 객체는 서로를 빼놓고 얘기할 수 없다. 객체 지향 디자인의 핵심은 객체가 아닌 클래스에 관한 것인데, 이..
-
Concurrency, 병행성이란?iOS/GCD 2022. 9. 4. 14:58
Concurrency Concurrency는 병행성이다. 그렇다면 무엇을 병행하는가? Concurrency는 여러 프로세스들을 병행적으로 처리하지만, 동시에 처리하지는 않는 것을 의미한다. 병행적으로 처리하는데 동시에 처리하지 않는다는 말이 모순적이라고 느낄 수 있지만, 병행적으로 처리하는 것과 동시에 처리하는 것은 엄연히 다른 개념이다. Concurreny vs Parallelism 병행적으로 처리하는 것을 concurrent라 하고, 동시에 처리하는 것을 parallel이라고 한다. 병행 : Concurrent 동시 : Parallel 두 개념이 어떻게 다른 지 이해를 돕기 위해 Concurrency를 더 명확하게 설명하자면 concurrency는 두 개 이상의 프로세스가 하나의 공유 자원(CPU의 ..
-
[iOS] Outlet이란?iOS 2022. 8. 9. 20:54
Outlet Storyboard를 사용하는 개발자라면 위 코드를 한 번쯤은 본 적이 있을 것이다. Outlet은 IBOutlet이라는 심볼이 붙은 프로퍼티로, nib file이나 storyboard에서 그래픽 인터페이스를 통해 값을 설정할 수 있다. 즉 그냥 프로퍼티(변수)다. 위와 같이 변수 앞에 IBOutlet 심볼을 붙여서 변수를 선언하고, 여기에 다른 객체를 연결한다. 위 코드에서는 라벨을 연결하게 될 것이다. Outlet은 아래와 같이 사용한다. 클래스의 interface에 outlet을 선언한다. Outlet과 nib file이나 storyboard에 있는 다른 객체를 연결한다. 파일이 load되면 연결이 설정된다. 위 그림은 MyController라는 클래스에 textField outlet을..
-
[iOS] View controller의 역할iOS 2022. 8. 9. 20:44
이 글은 애플 공식 문서 "The Role of View Controllers"를 번역, 의역한 것으로, view controller이 하는 일들을 대략적으로 이해하기에 좋다. View Controller Programming Guide for iOS: The Role of View Controllers View Controller Programming Guide for iOS developer.apple.com The Role of View Controllers View Controller들은 앱 내부 구조의 근본이다. 모든 앱은 최소 하나 이상의 view controller를 가지고 있다. 각 view controller는 다음의 것들을 관리한다: 사용자 인터페이스의 일부(간단하게 말해서 그냥 vie..