분류 전체보기 67

iOS 화면전환

​화면전환의 방식 1. ViewController의 View위에 다른 View를 가져와 바꾸기 2. Navigation Controller사용(push, pop) 3. ViewContoller에서 다른 ViewController호출(present, dismiss) 4. segue를 사용해서 화면전환 ​ NavigationController 구조 Navigation Controller의 주요 역할은 컨텐츠 뷰 컨트롤러를 보여주고, 사용자 정의뷰(네비게이션 바 또는 툴바) 두 가지를 보여주는 것이다. 네비게이션 바는 뒤로가기 버튼과 커스터마이징 버튼을 추가 가능하고 툴바 뷰도 제공한다. Navigation Controller 사용(story board에서 적용) 1. Editor의 Embed In의 Navi..

iOS 기초 2021.12.10

URLSession

URLSession Network통신에 사용되는 데이터 전송 작업 그룹을 조정하는 객체 Apple에서 제공하는 네트워크 통신 API NSObject를 상속 URLSession 클래스 및 관련 클래스는 URL로 표시된 엔드포인트에서 데이터를 다운로드하고 엔드포인트로 데이터를 업로드하기 위한 API를 제공합니다. 또한 앱은 이 API를 사용하여 앱이 실행되고 있지 않거나 iOS에서 앱이 일시 중단된 동안 백그라운드 다운로드를 수행할 수 있습니다. 관련 URLSessionDelegate 및 URLSessionTaskDelegate를 사용하여 인증을 지원하고 리디렉션 및 작업 완료와 같은 이벤트를 수신할 수 있습니다. URLSession Task URL session에서 수행되는 특정 리소스 다운로드와 같은 작..

swift 2021.12.10

Method Swizzling

Method Swizzling Method Swizzling이란 원래의 메소드를 runtime때 다른 메소드로 바꿔 실행하는것 원하는 메소드로 바꾸면 메소드를 호출하기 전에 사용자 추적, 특정 기능을 수행할 수 있지만 버그 발생 가능 언제 사용할까? 서브 클래스를 만들어 사용하는것 보다 런타임때 특정 기능을 바꿔 사용할 때 특정 기능을 클래스&서브 클래스 모두 한번에 적용시키고 싶을 때 앱의 분석기능을 통합할 때 해당 메서드 대신 다른 메서드가 실행되도록 바꿀 때 사용 예제 extension UIViewController { class func swizzleMethod() { let originalSelector = #selector(UIViewController.viewDidLoad) let swizz..

swift 2021.12.10

AppDelegate, SceneDelegate

AppDelegate​ # ios12 버전 이전 ios프로젝트를 생성하면 AppDelegate.swift파일 자동적으로 생성 AppDelegate는 이름 그대로 앱과 시스템을 연결하기 위해 필요한 Delegate메소드를 포함하고있다.(UIApplicationDelegate) AppDelegate클래스에는 @UIApplicationMain어노테이션 기재되어있다. (이를 통해 앱은 시스템과 연결하기 위한 파일로 인식) # ios13 버전 이후(AppDelegate의 UILifeCycle역할을 SceneDelegate가 수행) 13버전 이후 AppDelegate의 역할 13이후 Scene Session를 관리하는 Session LifeCycle역할이 추가 앱의 가장 중요한 데이터 구조를 초기화 LaunchSc..

iOS 기초 2021.12.10

Layout Update Method

View를 구성하고 레이아웃을 업데이트하는 메소드 1. draw() 2. layoutSubViews() 3. setNeedsDisplay() 4. setNeedsLayout() 5. displayIfNeeded() 6. layoutIfNeeded() draw() 전달된 사각형안의 reciever의 이미지를 그린다. CoreGraphics 및 UIKit의 프레임워크에서 뷰를 그리는 하위클래스들은 draw() 오버라이딩하여 구현 배경만 표시하는 View이거나 기본 layer객체를 사용하여 직접 컨텐츠를 구성하는 경우엔 사용 안해도됨 layoutSubView와 다르게 자식 view의 draw까지는 호출하지 않는다. ※ 이 메서드는 뷰가 처음 표시되거나 뷰의 보이는 부분을 무효화하는 이벤트가 발생할 때 호출된다..

swift 2021.12.09

Increasing Performance by Reducing Dynamic Dispatch

Increasing Performance by Reducing Dynamic Dispatch 다른 많은 언어와 마찬가지로 Swift는 클래스가 수퍼클래스에 선언된 메서드와 속성을 재정의할 수 있도록 합니다. 이는 프로그램이 런타임에 참조되는 메서드 또는 속성을 결정한 다음 간접 호출 또는 간접 액세스를 수행해야 함을 의미합니다. Dynamic Dispatch라고 하는 이 기술은 각 간접 사용에 대해 일정한 양의 런타임 오버헤드를 희생시키면서 언어 표현력을 높입니다. 성능에 민감한 코드에서 이러한 오버헤드는 종종 바람직하지 않습니다. 간접호출은 비용이 많이들고 직접 호출보다 퍼포먼스의 속도가 느리다. 아래의 방법을 통해서 dynamic dispatch의 런타임 오버헤드를 줄이자! 1. 더이상 상속이 필요없..

공식문서 2021.12.09

Xcode 단축키

cmd + shift + O 프로젝트내 클래스, 함수검색(Quick Search) ​ control + cmd + 좌, 우 히스토리 파일로 이동 ​ cmd + shift + l Label, Text등 Object검색창 ​ cmd + s 현재 작동하는 시뮬레이터 화면 캡쳐 cmd + shift + k 프로젝트 클린 ​ cmd + b 프로젝트 빌드 ​ cmd + r 프로젝트 실행 ​ cmd + e 선택한 텍스트블럭을 모든 텍스트 에디터에 복사 ​ cmd + G cmd + e로 실행한 단어를 아래로 순차탐색 ​ cmd + option + = Interface Builder autolayout 맞추기 ​ 시뮬레이터 option + click pinch out, pinch in, rotate ​ 시뮬레이터 shi..

Xcode 2021.12.09

KVC, KVO

KVC(Key-Value Coding) 특정 문자열(keyPath)을 통해 프로퍼티에 접근가능한 방법 객체의 값을 직접 가져오지 않고, Key 또는 KeyPath를 통해 간접적으로 데이터를 가져오는 방법 struct Rectangle { var size: Int } struct Figure { var division: Rectangle } let rectangle = Rectangle(size: 20) var figure = Figure(division: rectangle) figure[keyPath: \.division.size] // 20 figure[keyPath: \.division.size] = 10 // 10 KeyPath 생성 let figureKeyPath = \Figure.division..

swift 2021.12.08

Properties

property(프로퍼티) 크게 5가지로 구성 1. 저장 프로퍼티(Stored Properties) 2. 지연 저장 프로퍼티(Lazy Stroed Properties) 3. 연산 프로퍼티(Computed Properties) 4. 프로퍼티 감시자(Property Observers) 5. 타입 프로퍼티(Type Properties) 1. 저장 프로퍼티(Stored Properties) 가장 단순한 개념으로 클래스 또는 struct의 인스턴스와 연관된 값을 저장하는 프로퍼티 class TestProperty{ var a: Int // Stored Property var b: Int // Stored Property } 2. 지연 저장 프로퍼티(Lazy Stored Properties) expression :..

swift 2021.12.08

init(frame:), required init?(coder: NSCoder), awakeFromNIb()

init(frame:) Interface Builder에서 적용하지 않고, 코드로 직접 UIView를 상속받은 클래스를 만들 때 사용 required init?(coder: NSCoder) init(frame:)과 마찬가지로 UIView를 상속받은 클래스를 만들 때 구현해줘야 한다. 언제 사용될까? 스토리보드나 Xib파일에서 리소스를 가져와야 할 때 Cell을 xib로 구성 하였을때와 같이 스토리보드나 Xib파일을 이용해 UI를 구성하는 것이 가능하다. 이 부분은 NSCoding에서 해답을 얻을 수 있다. 인터페이스 파일은 UI 구성을 xml형태로 저장하고 있는데 이 저장한 형태를 사용자의 화면으로 그대로 가져오기 위해선 이 파일에 대한 구조를 가져오는것이 필요한데 이것이 deserialization이라..

iOS 기초 2021.12.07