iOS/Swift 5

[Swift] 동시성, 병렬성, 동기, 비동기

동시성 하나의 코어에서 여러 쓰레드가 **동시에 처리되는 것**처럼 보이는 것. 병렬성 한가지 일을 여러 코어가 일을 분배해서 하는 것. 운영체제가 조절을 해 주는 부분이라 iOS 앱 개발자가 신경을 별로 쓰지 않아도 된다. 동시성이 필요한 이유 화면의 스크롤을 내리는 경우 동시적으로 처리를 해주지 않는다면 다음화면을 불러오고 스크롤을 내리기 때문에 버벅거리는 현상이 나올 수 있다. 이런 경우 동시적으로 처리를 해준다면 좀 더 부드러운 화면이 나오고 앱의 완성도가 높아질 수 있다. 프로세스가 논리적인 쓰레드를 여러개를 생성해서 DispatchQueue에 넣고 GCD가 CPU의 쓰레드에 넣어주는 것일까? 🤔 동기 / 비동기 동기 동기란 synchronous 라고 하고 task가 실행되고 완전히 마칠때까지 ..

iOS/Swift 2024.02.01

[Memory] heap memory

heap memory 힙 메모리 라는 용어는 동적할당을 위해 예약된 메모리 영역을 나타내는데 여기서 힙 이라는 것은 자료구조의 힙. 예를들어 데이터를 꺼낼 때 부모 노드와 스와핑 해서 꺼내는 등의 그런 힙이 아니라 생긴 구조 자체가 힙이라는 것이다. 작동 시나리오 1. 앱을 실행시키면 컴퓨터의 메모리에 앱 자체가 올라갈 것이고 UIApplication등의 객체가 올라갈 것이다. 2. 거기서 중간단계를 건너뛰고 ViewController를 가지게 되면 ARC가 적절한 크기의 메모리 블록을 찾아 포인터를 반환해준다. 2-1. 만약 찾지 못한다면 운영체제에 메모리를 요청한다. 2-2. 운영체제가 동적메모리 할당 로직에 의해 요청한 크기의 메모리를 가져다주고 메모리가 다 차서 없다면 메모리 스위칭도 한다. 3...

iOS/Swift 2024.02.01

[Trouble] stride(from: to: by:) 와 stride(from: through: by:)

stride to 는 to를 포함하지 않는다. stride through는 through를 포함한다. 하지만 소수의 경우.. for i in stride(from: 3, through: 0, by: -0.1) { array1.append(i) } for i in stride(from: 3, to: 0, by: -0.1) { array2.append(i) } print(array1.count) // 30 print(array2.count) // 30 결과 값이 같게 나온다. 왜냐하면 부동소수점의 차이 때문. 각 반복문의 값을 보자 array1 (stride through, 포함하는 경우) 0.4999999999999999 0.39999999999999986 0.2999999999999998 0.199999..

iOS/Swift 2023.04.07

[Trouble] protocol get set

protocol SampleProtocol { var x: Int { get } } struct SampleStruct: SampleProtocol { var x: Int } var sample: SampleStruct = SampleStruct(x: 10) sample.x = 20 print(sample.x) // prints 20 프로토콜내에서 get, set을 설정해주는 경우 sample 변수가 SampleStruct타입이 되면 protocol의 x가 read-only 임에도 불구하고 x값이 변환이된다. 어노테이션을 해주지 않아 타입추정을 하게되는 등, 타입이 SampleStruct가 되면 Struct를 생성하기 때문에 별 관계없는 상태가 된다. protocol SampleProtocol { var..

iOS/Swift 2023.03.28

[Swift] Timer 사용방법, 주의사항

Timer iOS 2.0 부터 사용가능. Foundation에 들어있음. 타이머를 설정해서 일정 Interval 간격마다 어떤 실행을 할 수 있게 도와주는 라이브러리 사용법 인스턴스를 만들 때 클래스 메서드를 사용하는 방법과 인스턴스를 생성하는 방법이 있음. 사용 예제 레이블 하나와 실행 버튼 하나 생성 @IBAction func timerStopFunc(_ sender: UIButton) { timerStartButton.isHidden = false timerStopButton.isHidden = true timer?.invalidate() self.timer = nil } @IBAction func timerStartFunc(_ sender: UIButton) { guard timer == nil ..

iOS/Swift 2023.03.22