raywenderlich YOUTUBE영상을 보다가 신기한 게 있어서 정리하려 합니다. (처음 들어본 팬텀 타입 ,,하하) 여기 있는 loopup 딕셔너리는 주와 수도가 연결되어 있습니다. 하지만 직관적으로 눈에 들어오진 않습니다. 이것을 개선하기 위해선 typealias를 사용할 수 있습니다. String타입 대신에 State와 Capital로 변경하면 지금 보단 직관적입니다. 조금 더 직관적으로 보이죠 ,, 😦 이렇게 하면 loopup딕셔너리는 주와 수도로 이뤄진 딕셔너리로 이전보다 파악하기 쉬워집니다. 자 그럼 주와 수도를 출력해보는 test함수를 만들고 출력해봅시다. 이렇게 test 함수를 호출했는데 출력은 The capital of Juneau is Alaska라고 출력됩니다. (주노의 주는 알..
https://hyerios.tistory.com/33 앞에서 말한 메모리 누수의 원인인 순환 참조는 어떻게 해결할 수 있을까요 이를 해결하기 위한 방법은 두가지가 존재합니다. - weak reference 약한 참조 - unowned reference 미소유 참조 즉 강한 참조로 하지 않고도 약한 참조와 미소유 참조로도 서로를 참조할 수 있습니다. 그럼 여기서 드는 궁금증 Q. weak, unowed reference의 차이점은 뭐야! 약한 참조는 옵셔널이며 미소유 참조는 옵셔널이 아닙니다. Q. weak, unowed reference는 언제 사용할까요! 약한 참조는 다른 인스턴스의 수명이 짧을 때 사용합니다. 미소유 참조는 다른 인스턴스의 수명이 같거나 긴 경우 사용합니다. weak referenc..
스위프트의 ARC는 앱의 메모리 사용을 추적하고 관리합니다. https://hyerios.tistory.com/32에서 ARC란 무엇인지 알아보았습니다. ARC는 Person인스턴스에 대한 참조 카운트를 추적하고 Person이 더 이상 필요하지 않으면(참조 카운트가 0이 되면) 인스턴스 할당을 해제했습니다. 자동으로 관리해줌에도 불구하고 신경 써줘야 하는 게 있다고 했는데 그것은 메모리 누수입니다. 그럼 순환참조는 어떤 상황에 발생될까요 .ㅇ. 클래스 인스턴스 간 순환 참조 두 개의 클래스의 인스턴스가 서로 강한 참조로 각 인스턴스가 다른 인스턴스를 참조하는 경우 순환 참조(strong reference cycle)가 생깁니다. 예를 들어 class Person { let name: String init..
ARC란 스위프트의 ARC(Automatic Reference Counting)는 앱의 메모리 사용을 추적하고 관리합니다. 그렇기 때문에 따로 메모리를 어떻게 관리해야 하는지 생각할 필요가 없습니다. ARC는 클래스 인스턴스가 더 이상 필요하지 않을 때 클래스 인스턴스가 사용하는 메모리를 자동으로 비우기 때문입니다. (하지만 몇 가지 부분에서 신경 써줘야 하는 게 있음 ㅎㅋㅎㅋ) 레퍼런스 카운팅은 오직 클래스의 인스턴스에만 적용됩니다. 말 그대로 reference counting 참조 카운팅 = 레퍼런스 카운팅은 참조 타입만 해당합니다. 구조체/struct와 열거형/enum은 값 타입이므로 참조값을 저장하거나 전달하지 않아 이에 해당하지 않습니다. ARC 동작 방식 클래스의 새 인스턴스를 만들 때마다 A..
Substring은 String의 일부를 말합니다. 예를 들어 Subscript를 사용하거나 prefix(_ :) 메소드를 사용해서 String에서 Substring을 가져오는 경우 스위프트에서는 String처럼 사용할 수 있습니다. 둘 다 String Protocol을 따르기 때문입니다. 하지만 String과 다르게 Substring은 작업을 수행하는 짧은 시간 동안 사용해야 합니다. 즉 Substring은 장기로 사용하는 용도가 아닙니다. 위와 같이 greeting은 문자열 Hello, world! 를 가집니다. beginning에서는 greeting의 [..
진행했던 프로젝트에서 searchBarTextField에 text가 없으면 검색 버튼을 비활성화시켜 검색이 되지 않도록 해주는 작업이 필요했습니다.(즉 검색창에 검색할 글자가 없으면 검색 버튼을 비활성화! 검색할 글자가 있는 경우 검색 버튼을 활성화!) 먼저 textField에 text가 있는지 확인해 주고- 있다면 검색버튼 활성화- 없다면 검색버튼 비활성화를 코드로 작성하며 생긴 궁금증 ,,, 음 textField에 text가 있는지 확인해 주는 작업은 아래와 같이 두 가지 방법이 존재했습니다.첫 번째 방법 isEmpty 두 번째 방법 count == 0 글자가 있냐 없냐의 여부만 알면 되니까 음,, (개인적인 생각) 조금 더 직관적인 isEmpty를 쓰자.그런데 count == 0과 비교했을 때의 ..
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) .. ..
- Total
- Today
- Yesterday
- 스위프트
- iOS SwiftUI
- 애니메이션
- objc
- ARC
- objective-c
- 책 후기
- stanford SwiftUI
- 독서
- Animation
- Algorithm
- rxswift
- 머신러닝
- Xcode
- leetcode
- SWIFT
- 책 추천
- 알고리즘
- wwdc
- Deep learning
- swift5
- swiftUI
- ReactiveX
- ios
- 스위프트UI
- string
- 문자열
- 딥러닝
- RX
- 책
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |