본문 바로가기

전체 글

(11)
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(..
[Swift] Closure 클로저는 {} 형식의 코드블럭 이다. - 전달인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 함수의 반환 값이 될 수도 있다. - 참조 타입이다. - 함수는 클로저의 한 형태로 이름이 있는 클로저이다. Named Closure : 함수 func doSomething() { print("Somaker") }​ Unnamed Closure : 익명 함수 -> 보통의 Closure let closure = { print("Somaker") }​ Closure의 기본 형식 { (Parameters) -> return Type in 로직 구현 } 1. 클로저를 변수나 상수에 대입할 수 있다. let closure = { () -> () in print("Closure") } let clos..
[Swift] Class 와 Struct 구조체와 클래스? OOP(Object-Oriented Programming)를 위한 필수 요소로, 프로그램의 코드를 추상화하기 위해 사용합니다. 1. Struct (구조체) - Value Type 하나 이상의 변수를 묶어서 새로운 자료형을 정의하는 도구입니다. - Struct 명 : 대문자 카멜 케이스 사용 - Property, Method 명 : 소문자 카멜 케이스 사용 상속이 불가능 합니다. AnyObject로 타입캐스팅이 불가능합니다. 생성자를 구현하지 않을 시, 기본 initializer를 사용할 수 있습니다. Swift에서 Struct를 사용할 경우, let -> Instance 내부의 Property 값을 변경할 수 없음. var -> Instance 내부의 Property가 var로 선언된 ..