일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Raw value and Associated value
- 1009번
- iOS Static Library 사용하는방법
- CoreData
- 트레일링 클로저
- dateFormatter
- Persistent store Coordinator
- Swift closure
- Clean swift
- NSSortDescriptor
- CoreData Filter
- Java
- NSPredicates
- Swift
- codability
- 일급 객체
- CoreData Concurrency
- 스위프트 클로저
- Associated Value
- 2022 부스트캠프
- CoreData Stack
- LightWeight Migration
- iOS Static Library
- NSManagedObject SubClass
- persistentStoreCoordinator
- Swift LinkedList
- expensive operation
- Swift 고차함수
- 다익스트라 이해
- leetcode #01
- Today
- Total
목록Swift (13)
하루를살자
1.0 클래스 프로퍼티간의 강한 순환 참조 ARC 란? 위 글에서 정리한듯 ARC 는 Heap 영역에 instance 의 reference count 가 0 일때 자동으로 메모리를 해제해준다. 강한 순환 참조 (strong reference cycle) 은 한쌍의 인스턴스의 가 서로를 참조하고 있어서 reference count 가 0 이 되지않기 때문에 deinit 이 안되는 상황을 말한다. 아래 예제 코드 를 살펴보자 class Phone { let type: String var owner: Person? init(type: String){ self.type = type } deinit { print("Phone Deinit") } } class Person { let name: String var ..
Capture 클로저의 캡처 방식은 아래와 같은 코드가 주어질때 func doSomething() { //1 var num: Int = 0 print(address(of: &num)) print("num check #1 = \(num)") //2 let closure = { print(address(of: &num)) print("num check #3 = \(num)") } num = 20 print("num check #2 = \(num)") closure() } 1.0: num 은 0 이라는 int 타입의 값을 생성하면서 메모리에 값이 저장된다. 2.0: Closure 안에 외부 변수인 num 을 사용해서 print 하게 되는데, closure 내부의 scope 안에 선언된 외부 변수를 사용하게 되..
ARC ARC는 메모리 영역 중 힙 영역을 관리한다 . 힙 메모리 영역은 인스턴스, 클로저 등 참조타입(reference type) 등이 자동으로 등록 된다. (왜 클로저가 reference Type 인지는 다음 포스트에서 알아보겠다.) class Person { let name: String } //1 let person1 = Person(name: "Kai") //2 let person2 = person1 1.0 힙 영역에 Person 인스턴스 메모리 할당, person1 은 stack 영역에서 person Instance 의 메모리 주소를 pointing 하고 있다. 2.0 person2 라는 변수가 stackMemory 에 새로 할당되는데, 똑같은 Heap Memory 의 Person Instan..
What is LinkedList? LinkedList 는 Element 간의 연결(Link) 를 통해서 리스트를 구현한 자료구조 이다. Why LinkedList? 연결리스트의 효율성은 배열과 비교가 가장 많이 되는데 이유는 둘다 리스트 형태 를 구현할수 있다는것이다. 두가지의 자료구조의 특징을 이해하고 상황에 따라 적절히 사용하기 위해서 각각의 시간 복잡도를 데이터 탐색, 추가, 삭제 3가지로 나누어서 살펴봤다. 데이터 탐색 연결리스트: 특정 데이터를 찾기 위해서 연결되어 있는 요소들을 처음부터 순차적으로 탐색해야하기 때문에 O(n) 의 시간 복잡도를 갖는다. 배열: 배열의 요소는 특정 인덱스를 가지고 있기 이를 통해서 빠르게 특정 데이터를 찾을수 있다. O(1) 의 시간복잡도를 갖는다. 데이터 ..
WWDC 나 주변에서 dateFormatter 는 비싼 객체이고, 사용할때 신경써서 사용해야한다는 말을 들었다. 그럼 DateFormatter 를 언제, 어떻게 사용할때 성능저하를 일으킬까? DateFormatter 를 사용하는 데 어떤 부분에서 시간이 오래걸리는지 이 아티클 에서 XCTest 의 Measure 메소드를 사용해서 정리해놓았다. 이 글을 요약하면 아래와같은 상황을 남발할때 성능저하(실행 속도가 느려짐으로 전체 프로그램이 버벅이는 현상) 를 불러올수 있다고 한다. DateFormatter 생성할때. DateFormatter 의 프로퍼티를 변경할때 date(from: String) 을 실행할때 그럼 어떤 식으로 DataFormatter 를 사용해야할까? DateFormatter 가 생성되면 이..
트레일링 클로저는 함수의 마지막 인자 값이 클로저일 때 인자값 형식으로 작성하는대신 함수 의 뒤에 꼬리처럼 붙일수 있는 문법을 뜻한다. 이때 클로저가 그 함수의 마지막 인자 값일때만 트레일링 클로저를 사용할수 있고, 인자 레이블을 생략한 상태로 쓸수있다. 아래 함수 는 어떠한 프로그램을 num 번 만큼 실행하고 completion 클로저의 로직의 결과 값으로 false 가 나올시 그 프로그램은 종료 시키는 함수이다. func run (num : Int , completion : (Int) -> (Bool) ) { for i in 1..
스위프트에서 클로저는 일회용 함수를 작성할수 있는 구문이며 이름을 작성할 팔요없이 생략된다는 점에서 익명(Anonymous) 함수 라고도 불린다. 익명함수 라는 이름에 걸맞게 함수를 선언하는 func 키워드를 생략하며, 함수의 이름또한 생략 한다. 1. Func 키워드 와 함수명 제외한 클로저 문법 {(매개변수) -> 반환 타입 in 실행구문 } in 키워드를 사용하여 실행 블록의 시작을 표현 한다. 2. 반환 타입이 없는 클로저 {() -> () in 실행구문 } //or {() -> Void in 실행구문 } 클로저 표현식의 모호성을 제거하기 위해 반환 값이 없는 함수는 빈괄호나 타입 에일리어스 로 작성된 Void 를 이용해서 표현가능. 3. 클로저 경량 문법 일급함수 의 특징을 사용해서 매개변수로 ..
일단 고차함수을 이해하기 위해선 Swift 의 일급객체 인 일급함수의 특성과 클로저 사용법을 먼저 이해 해야지 고차함수 를 쉽게 받아드릴수 있기에, 이둘의 계념과 어떻게 사용되는지 공부를 해야합니다. 고차함수를 사용하게 되면 - 스위프트 를 다루는 기술이 향상된다. - 코드의 가독성을 높혀준다. - 더욱 함수형 프로그래밍 언어 답게 된다. 고차 함수란? func addition (num1:Int, num2:Int) -> Int { return num1 + num2 } func subtraction (num1:Int, num2:Int) -> Int { return num1 - num2 } func calculator (operation: (_ num1:Int, _ num2:Int) -> Int, num1:..