
뷰 컨트롤러의 생명주기에 대해서 알아봅시다. viewDidLoad() 메모리에 로드된 후 호출됩니다. 딱 한번 실행됩니다. (딱 한 번만 실행되기 때문에 초기화면을 구성할 때 사용합니다.) 뷰 컨트롤러에 의해 자동으로 호출됩니다. 메모리 워닝에 의해 view가 없어지지 않는 한 다시 호출되지 않습니다. 뷰 컨트롤러의 사이클은 위 이미지와 같이 이루어집니다. - viewWillAppear - viewDidAppear - viewWillDisappear - viewDidDisappear viewWillAppear() 뷰 계층에 추가될 예정임을 알립니다. 뷰 컨트롤러가 나타나기 직전에 실행됩니다. 뷰 컨트롤러가 나타날 때마다 실행됩니다. viewDidAppear() 뷰 계층에 추가되었을 때 호출됩니다. vie..

Copy-On-Write는 구조체를 복사할 때 성능을 향상시키는 기술입니다. Ex) 1000 개의 요소가있는 배열이 있습니다. 배열을 다른 변수에 복사 한 경우, Swift는 두 배열이 같은 경우에도 1000 개의 요소를 모두 복사해야 합니다. 하지만 이 문제는 copy on write를 사용하여 해결됩니다. 동일한 배열에서 두 변수를 가리킬 때 둘 다 동일한 기본 데이터를 가리 킵니다. 즉 Copy on write는 복사 작업이 실제로 필요할 때까지 지연시켜 Swift는 낭비되는 작업이 수행되지 않도록 할 수 있습니다. 간단한 예를 들어 확인해봅니다. a에는 1부터 10까지 저장된 배열을 선언했습니다. b에는 a를 할당했습니다. copy on write가 되지 않는다면 addressOf(b)를 찍었을 ..
reversed()의 시간복잡도가 O(1)이라니 . . . 알고리즘 문제 중 역순으로 출력하는 문제가 있었는데 저는 그럴 때마다 Array의 reversed()아니면 reverse()를 사용했습니다. 굳이 reverse도 있는데 왜 reversed를 사용하는 거야 . . 라고 생각했고 찾아보았습니다. 뭐가 달라 !!!!!! 결과적으로 시간 복잡도에서 차이가 났습니다. 모르면 일단 공식문서를 살펴봅니다. reverse() 설명으로 그 자리(in place)에서 element를 역순으로 돌립니다. 함수는 mutating func reverse()로 정의되어 있습니다. 그 공간에서 역순으로 돌리기 때문에 뭐 새롭게 생기는 배열도 없습니다. 새로운 배열을 리턴하지 않습니다. 그리고 시간 복잡도는 O(n) .. ..
1. sequence 1.2.4.8.16 쭉쭉 출력된다. 시퀀스의 첫 번째 Element는 항상 첫 번째 Element이며 각 연속되는 Element는 이전 Element에 next를 호출한 결과이다. next는 nil을 반환 할 때 시퀀스가 끝난다. next가 만약 nil을 반환하지 않으면 무한대로 ... 간다. 2. stride 두 수 사이에 구간을 만든다. 시퀀스 ! 3...2...1...이 출력된다. // from 3부터 to 0까지 by -1씩 3. swap 두 개를 교환한다. x는 100이고 y는 -100인데 swap해주게되면, x는 -100이되고 y는 100이된다. 그러므로 x,y는 variable이여야한다.
스위프트 .... 깊고도 깊은 .... 언어의 세계 Swift 공식 문서에 function리스트가 있길래 정리해보자 // https://swiftdoc.org/ 1. abs absolute value 절대 값 ! -100 을 100으로 2. assert - assert(, ) 위에서 사용한 x,y 변수를 사용했다. x = -100, y = 100 인 상태에서 assert( x == -100, "x가 -100이 아니다!")라고 작성한다. x == -100 이라는 조건에 만족하기 때문에 그냥 넘어간다. x를 100으로 변경하고 assert( x == -100, "x가 -100이 아니다!")를 실행한다. 그러면 Assertion failed메시지 x가 -100이 아니다 ! 가 뜬다. x == -100 이라는 ..
Swfit의 Shuffle( ) "Use the shuffle() method to randomly reorder the elements of an array."shuffle()은 배열의 순서를 랜덤화 하는 함수입니다. 시간 복잡도는 O(n)이네요. WWDC2018 Generic을보다가 shuffle()이 어떻게 구현되었는지 언급이 되길래 정리하고자 합니다. 사용된 fisher yates shuffle 알고리즘은 오래된 알고리즘입니다. 위에서 shuffle()은 배열을 랜덤화 할때 사용하는 함수라고 했으니array.shuffle()을 해주고 print를 찍어보면 잘 섞여서 나오는걸 확인할 수 있습니다.위 print문이 어떻게 찍혔는지 과정을 살펴봅시다.먼저 컬렉션의 첫 번째 요소에 대한 인덱스부터 시작합..
Q delegate는 왜 Weak로 선언할까요? A Retain cycle 을 피하기 위해서! 기본적으로 클래스의 객체를 가리키는 각각의 reference는 강함 참조(strong)입니다.두 클래스 인스턴스가 서로 강한 참조를 하게 되면 그것이 Retain Cycle이 됩니다. 서로 강한 참조를 하고 있으면 사용하지 않는데도 deinit 되지 않습니다. 만약에 객체에 대한 강한 참조가 존재하지 않는다면 메모리에서 자동으로 해제됩니다.weak로 선언한다면 강한 참조가 되지 않아 객체의 메모리가 해제되면 자동으로 nil이 될 것입니다. Retain Cycle은 delegate에서는 흔하게 발생합니다. 그래서 delegate를 사용할 땐 대부분의 상황에 weak로 선언합니다.UITableViewDelegate..
애니메이션 옵션들 중 자주 사용하는 것들curveLinearcurveEaseIncurveEaseOutcurveEaseInOut // https://developer.apple.com/documentation/uikit/uiview/animationoptions에 살펴보면 더 많은 옵션들이 나와 있습니다. curveLinear 애니메이션 커브는 애니메이션이 지속되는 동안 균등하게 애니메이션을 발생시킵니다. curveEaseIn 애니메이션이 느리게 시작된 다음 애니메이션 진행 속도가 점점 빨라집니다. curveEaseOut 애니메이션이 빠르게 시작되고 완료되면 느려집니다. curveEastInOut 애니메이션을 느리게 시작하고 빠르게 가속화 한 다음 애니메이션이 완료되기 전에 느리게 합니다. 속도 그래프
- Total
- Today
- Yesterday
- objc
- Deep learning
- 책 후기
- 스위프트UI
- 책
- leetcode
- 애니메이션
- 문자열
- rxswift
- wwdc
- 책 추천
- Xcode
- 머신러닝
- RX
- 독서
- Algorithm
- objective-c
- 딥러닝
- ios
- swift5
- Animation
- string
- iOS SwiftUI
- stanford SwiftUI
- ARC
- SWIFT
- 알고리즘
- ReactiveX
- 스위프트
- swiftUI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |