무슨에러를 던지는지 명시
https://wody.tistory.com/10?category=1018971
https://techblog.woowahan.com/2704/
일반적으로 반복적이고 표준화된 코드 또는 템플릿
expectation 공부하기
비동기 코드를 테스트 할때 기다려주기
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`
이 메서드는 앱이 실행되고 새로운 UIScene과 연결될 때 호출되는 메서드로, 앱의 기본 뷰 구조를 설정하는 역할
스크롤 뷰가 페이지 단위로 스크롤
사용자가 스크롤을 멈추었을 때 자연스럽게 감속되는 효과를 제공
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) next = (lldb) n = (lldb) thread step-over
(lldb) step = (lldb) s = (lldb) thread step-in
(lldb) finish = (lldb) thread step-out
현재 프로세스를 끝내고 다시 새로 빌드하여 런 시키는 명령어
(lldb) run = (lldb) r = (lldb) process launch
다음 브레이크포인트 지점까지 멈추지 않고 프로세스를 쭉 진행 시키는 명령어
(lldb) continue = (lldb) c
클로저는 참조 타입으로, Heap에 살고 있음
캡쳐할 변수들 나열
Const Value Type으로 캡쳐함
Reference Type을 Const Value Type으로 캡쳐해봤자 의미가 없음
클로저는 Reference 값을 캡쳐할 때 기본적으로 "strong"으로 캡쳐를 함
Object lifetime의 기준 - use-based