본문 바로가기

전체 글

(13)
Realm Migration - 클래스명 변경 Realm 특정 클래스명 변경(A -> B) 해보기 1. 프로젝트 코드 내 클래스 삭제2. Realm DB 내 클래스 및 데이터 삭제  (기존 앱 사용자가 있으므로 Realm Migration이 되어야 함) migration 로직 내 delete, deleteData를 이용해보려 하였으나 에러 발생Can only delete an object from the Realm it belongs tomigration.delete(newObject)migration.deleteData(forType: newObject)  대응 방안- 신규 클래스 생성 후 데이터를 기존 클래스에서 가져와서 세팅함- 기존 클래스 내 Realm 데이터 삭제 (단, 코드 내 기존 클래스 유지 되어야 함)// 신규 클래스를 생성하고, 데..
iOS Realm Migration 마이그레이션?- Realm DB 스키마 구조가 변경되는 경우 앱 충돌이 발생하게 된다- 이때 기존 앱을 설치하여 사용하는 경우 충돌 발생을 막으면서 변경되는 스키마 구조를 적용하려면 마이그레이션을 해야 한다.  Schema Version- 마이그레이션을 관리하기 위한 스키마 버전- 시작은 0- 컬럼의 추가나 삭제와 같은 동작은 스키마 버전을 증가시키는 것만으로 마이그레이션이 이루어진다.  마이그레이션 기본 let config = Realm.Configuration( schemaVersion: schemaVersion, // SchemaVersion 올리기 (+1) migrationBlock: { migration, oldSchemaVersion in..
TableView Dynamic Height 구현 1. 테이블 뷰 행 높이 automaticDimension 으로 설정. self.tableView.rowHeight = UITableView.automaticDimension 2. 예상되는 rowHeight 값 지정. self.tableView.estimatedRowHeight = 80 3. Cell 내의 각 요소들의 Constraints를 적절히 지정해야 한다.
UIWebView 와 WKWebView 차이 앱 내부에 HTML 데이터 / 콘텐츠를 표시해야 하므로 WKWebView가 개발 되었다. WKWebView는 UIWebView와 비교하여 더 높고 효율적인 성능을 제공한다. - WKWebView는 더 빠른 자바 스크립트 엔진인 Nitro를 사용한다. - WKWebView는 Javascript와 네이티브 코드 간의 통신을 비동기적으로 처리한다. - WKWebView는 서버 인증 문제를 지원한다. 암호로 보호된 웹사이트의 사이트 자격 증명을 입력할 수 있음을 의미한다. UIWebView WKWebView 도입시기 iOS 2.0 (iOS 13에서 deprecated 되었음) iOS 8.0 (iOS 9 이상 필요) 성능 약 3500개의 개체를 렌더링 90% CPU를 사용 (같은 수의 입자(particles)를 ..
[Swift] Array, Dictionary, Set, Tuple 배열(Array) 일련의 순서(Index)를 가지는 리스트 형식의 값을 저장하는 데에 사용되는 자료형. - 배열의 저장할 아이템의 타입에는 제약이 없지만 하나의 배열에 저장하는 아이템 타입은 모두 같아야 한다. - 선언 시 배열에 저장할 아이템 타입을 명확히 정의해야 한다. - 배열의 크기는 동적으로 확장할 수 있다. //배열 정의 var cities: [String] = ["Seoul", "New York", "LA", "Santiago"] print(cities[0]) //Seoul print(cities[1]) //New York print(cities[2]) //LA print(cities[3]) //Santiago 딕셔너리(Dictionary) Key와 Value 쌍으로 데이터를 저장하는 집단 ..
동시성과 병렬성의 차이 비동기(Asynchronous) 프로그래밍 : 프로그램의 주 실행 흐름을 멈추어서 기다리는 부분 없이 바로 다음 작업을 실행할 수 있게 하는 방식. 코드의 실행 결과 처리를 별도의 공간에 맡겨둔 뒤 결과를 기다리지 않고 바로 다음 코드를 실행하는 병렬 처리 방식을 의미한다. 동시성(Concurrency) 프로그래밍 : 동시에 실행되는 것처럼 보이는 것. 싱글 코어(멀티 코어에서도 가능)에서 멀티 스레드를 동작시키기 위한 방식. 여러 개의 스레드를 번갈아 가면서 실행되는 방식. 병렬성(Parallelism) 프로그래밍 : 물리적으로 동시에 정확히 실행되는 것. 멀티 코어에서 멀티 스레드를 동작시키는 방식. 데이터 병렬성과 작업 병렬성으로 구분. - 데이터 병렬성 : 전체 데이터를 나누어 서브 데이터로 나눈..
[Swift] 메모리를 참조하는 방법 (Strong, Weak, Unowned) * ARC(Automatic Reference Counting) 란? - 컴파일 시 코드를 분석해서 자동으로 retain, release 코드를 생성해주는 것. - 참조된 횟수를 추적해 더 이상 참조되지 않는 인스턴스를 메모리에서 해제해 주는 것. -> ARC는 자동으로 RC를 관리해주기 때문에 메모리 해제에 대한 개발자의 부담을 덜어준다. strong (강한 참조) - 해당 인스턴스의 소유권을 가진다. - 자신이 참조하는 인스턴스의 retain count를 증가시킨다. - 값 지정 시점에 retain이 되고 참조가 종료되는 시점에 release가 된다. - 선언할 때 아무것도 적어주지 않으면 default로 strong이 된다. var test = Test() // retain count 1 증가 te..
[Swift] Type Casting 타입 캐스팅은 인스턴스의 타입을 확인하거나 클래스 계층의 다른 부모 클래스/자식 클래스로 취급하는 방법이다. Swift의 타입 캐스팅은 is 나 as 연산자로 구현된다. 이 두 연산자는 값의 타입을 확인하거나 다른 타입으로 바꾸는 간단하고 표현적인 방법을 제공한다. 타입 확인 연산자 is - 해당 클래스이거나 자식 클래스라면 true 아니면 false를 반환한다. - 클래스뿐 아니라 모든 데이터 타입에 사용가능하다. class Fruits { var name: String init(name: String) { self.name = name } } var apple = Fruits(name: "Apple") // Fruits 클래스의 인스턴스 타입인지 확인 if apple is Fruits { print(..