TIL70 ✨

YaR Lab·2023년 7월 28일
0

TIL✨

목록 보기
58/135
post-thumbnail

🗓️23.07.28

resultType

무슨에러를 던지는지 명시

test

https://wody.tistory.com/10?category=1018971

https://techblog.woowahan.com/2704/

boilderplate

일반적으로 반복적이고 표준화된 코드 또는 템플릿

expectation

expectation 공부하기

비동기 코드를 테스트 할때 기다려주기

associated type

enum Shape {
    case circle(radius: Double)
    case rectangle(width: Double, height: Double)
    case triangle(base: Double, height: Double)
}

let circle1 = Shape.circle(radius: 3.0)
let circle2 = Shape.circle(radius: 5.0)
let circle3 = Shape.circle(radius: 2.5)
let circle4 = Shape.circle(radius: 7.0`

📌 scene(_:willConnectTo:options:)

이 메서드는 앱이 실행되고 새로운 UIScene과 연결될 때 호출되는 메서드로, 앱의 기본 뷰 구조를 설정하는 역할

isPagingEnabled

스크롤 뷰가 페이지 단위로 스크롤

decelerationRate

사용자가 스크롤을 멈추었을 때 자연스럽게 감속되는 효과를 제공

View

frame, bound

inset, offset

ViewController -(강한참조)>View -(강한참조)> ViewObject

강한참조순환

메모리에서 저게 사라지면 ViewController

import Foundation

class Number {
    var num: Int
    
    init(num: Int) {
        self.num = num
    }
    
    deinit {
        print("Number가 해제되었습니다.")
    }
}

class Test {
    var number: Number?

    init(number: Number?) {
        self.number = number
    }
    
    deinit {
        print("Test가 해제되었습니다.")
    }

    func addNumber() {
        DispatchQueue.global().async { [self] in
            Thread.sleep(forTimeInterval: 5)
            self.number?.num += 10
            print("숫자가 더해졌습니다.")
        }
    }
}

var test1: Test? = Test(number: Number(num: 10))
test1?.addNumber()
test1 = nil

⭐️ LLDB 명령어

1️⃣Step Over

  • 브레이크포인트가 걸려있던 상태에서 다음 코드로 넘어가는 기능
(lldb) next = (lldb) n = (lldb) thread step-over

2️⃣Step In

  • 다음 구문이 메서드 호출을 하는 경우에 디버거 포인트를 해당 메서드 내부의 시작 지점으로 이동시키는 기능
  • 내부에서 함수 호출이 없다면 스텝오버와 스텝인은 동일한 기능
(lldb) step = (lldb) s = (lldb) thread step-in

3️⃣Step Out

  • 현재 위치한 함수가 종료될때까지 프로세스를 진행하고 종료되면 브레이크포인트를 생성해줘서 멈추는 기능
(lldb) finish = (lldb) thread step-out

4️⃣Run

현재 프로세스를 끝내고 다시 새로 빌드하여 런 시키는 명령어

(lldb) run = (lldb) r = (lldb) process launch

5️⃣Continue

다음 브레이크포인트 지점까지 멈추지 않고 프로세스를 쭉 진행 시키는 명령어

 (lldb) continue = (lldb) c

🔵 클로저 캡쳐

클로저는 참조 타입으로, Heap에 살고 있음

1️⃣Closure List

캡쳐할 변수들 나열
Const Value Type으로 캡쳐함
Reference Type을 Const Value Type으로 캡쳐해봤자 의미가 없음

2️⃣Block vs Colosure

  • 블록에서는 값을 Value Type일 경우 값을 복사하여 Capture하고, Reference Type일 경우 Reference Captrue를 한다
  • 클로져에서는 Value Type, Reference Type 모두 Reference 방식으로 캡쳐

3️⃣Closure capture

클로저는 Reference 값을 캡쳐할 때 기본적으로 "strong"으로 캡쳐를 함

4️⃣ 전역 함수

  • 어떠한 값도 캡쳐하지 않음

5️⃣ 중첩 함수

  • 자신을 포함하고 있는 함수의 값을 캡쳐
    9

6️⃣ 익명 함수

🔴 ARC

Object lifetime의 기준 - use-based

0️⃣init

  • ference count가 1인 상태로 init

1️⃣retain

  • 새로운 reference 발생 시 실행

2️⃣release

  • 사용이 끝나고 실행

3️⃣withExtendedLifetiem()

  • 라이프타임을 길게 늘려줌

🟢 1단계 초기화

  • 모든 프로퍼티의 초기값을 설정
  • 인스턴스를 생성할 때 모든 저장 프로퍼티가 적절한 초기값으로 설정됨
  • 클래스 계층 구조에서 가장 하위의 서브클래스에서부터 가장 상위의 슈퍼클래스까지 거슬러 올라가며 이루어짐

🟢 2단계 초기화

  • 추가적인 초기화 작업을 수행
  • 인스턴스의 상태에 따라 필요한 초기화 작업을 수행

🔇 unowned

  • 약한 참조와 다르게 항상 값을 가지며, 절대 nil이 될 수 없는 비강한(non-optional) 참조
  • Swift 5.0부턴 unowned도 Optional Type이 되지만, 캡쳐 리스트로 동작할 땐 Non-Optional Type으로 동작

0개의 댓글