일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C
- 파일 시스템
- ftz level13
- 시간복잡도
- c언어
- 미로 탐색 알고리즘
- pwnable.kr
- 정렬 알고리즘
- SWiFT
- windosw 문자열
- ftz
- 재귀
- Java
- web
- 암호수학
- windosws wbcs
- 스택
- HTML
- LoB
- 자료구조
- 백준
- 큐
- Stack
- War Game
- 파이썬
- level13
- PHP
- System
- 두근두근 자료구조
- OSI
- Today
- Total
목록iOS (26)
나의 기록, 현진록

MVC와 MVVMMVC는 Massive Controller라는 문제를 가진다. 실제로 MVC 구조로 코드를 작성하다 보면 결국 Model과 View가 아닌 영역은 ViewController에 작성하기 때문이다. 그 대안으로 iOS에서는 MVVM 디자인 패턴을 사용한다. ViewModel을 추가하여 ViewController의 역할과 책임을 분리시킨다. 프로젝트의 규모나 기능의 복잡성이 크지 않다면 ViewModel을 추가하는 것만으로도 Massive Controller라는 문제에 대해서 해소할 수 있을 것이다. MVVM의 문제iOS에서 처음 MVC의 문제점을 느끼고 MVVM을 경험 했을 때 당시 느껴왔던 문제들이 해소되었다. ViewController의 크기는 줄었으며 그만큼 ViewModel로 책임..

Main Event Loop메인 스레드의 Run Loop이다. Main Run Loop로 불리기도 한다.앱이 시작될 때 생성된 UIApplication에 의해 자동으로 생성되고 실행된다. run() 메소드 동작 과정 중에 main loop를 실행한다.Input Source와 Timer Soruce 두 종류의 이벤트를 처리한다.Input Sorce를 통해 사용자의 저수준 이벤트를 수신 받는다. Main Event Loop의 동작 과정 1. Input Source로부터 입력 받은 저수준의 이벤트를 도착한 순서대로(FIFO) 이벤트 큐(Event Queue)에 넣는다. 2. Application object는 이벤트 큐에 있는 최상위 이벤트 객체를 가져와 해석하고 그에 상응되는 UIEvent(iOS)로 변..
WKWebView앱과 상호 작용이 가능한 웹 컨텐츠를 보여줄 수 있도록하는 객체HTML, CSS, JavaScript와 같은 컨텐츠를 앱의 네이티브 뷰와 함께 보여줄 수 있도록 제공한다.웹 기술이 네이티브 뷰보다 앱의 레이아웃 및 스타일 요구사항을 더 쉽게 충족할 수 있을 때 사용한다.앱의 콘텐츠가 자주 바뀔 때 사용할 수 있다.단순 일회성 또는 주기적으로 바뀌는 뷰, 이벤트 팝업 등이 예시가 될 수 있을 것 같다.URL을 정적으로 작성 되어 있는 것이 아닌 API 호출로 URL을 입력할 수 있다면 웹 뷰가 변경 될 때마다 앱을 배포하지 않아도 될 것 같다. (웹뷰 안 써봐서 모름...) WKWebView 이전에는 iOS 2.0부터 사용 가능한 UIWebView를 사용하였지만 iOS 8.0부터는 WKWe..

RxSwift반응형 프로그래밍(Reactive Programming)을 Swift에서도 활용할 수 있게 만든 라이브러리이다. 비동기 및 이벤트 기반 코드를 작성할 수 있다. 필요성1. 비동기 코드의 복잡성 해결iOS 앱 개발에서는 네트워크 요청, UI 이벤트 처리, 데이터 바인딩과 같은 비동기 작업이 많다. 키보드 상태를 감지하기 위해 NotificationCenter, tableView나 collectionView의 셀을 눌렀을 때의 Delegate, 네트워크 요청에는 GCD, Closure 등의 비동기 처리를 각각 다른 방식으로 처리하였다. 콜백 지옥이 존재할 수도 있고 일관되지 않은 방식으로 처리하다보니 복장성 또한 증가한다. 2. 명령형 프로그래밍의 한계 override func viewDidAp..

https://developer.apple.com/documentation/uikit/about-the-app-launch-sequence About the app launch sequence | Apple Developer DocumentationLearn the order in which the system executes your code at app launch time.developer.apple.com 사용자 또는 시스템이 앱을 실행하거나 시스템이 앱을 사전 준비(prewarm)한다. iOS 15이후 버전에서는 시스템은 디바이스 상태에 따라서 앱을 사전 준비 시킬 수 있다. 앱이 사용 가능한 상태가 되기 전까지 사용자가 기다리는 시간을 최소화하기 위해 실행 되지 않은(norunni..

1. 역사? iOS에서 부드러운 화면이 출력되기 위해 초당 60 프레임의 주사율을 유지하기 위해 GPU에서 직접 실행되는 그래픽에 강한 OpenGL을 사용하였다. C 기반의 API이므로 이식성이 뛰어나고 Object-C Cocoa Touch 앱과 완벽하게 통합된다고 한다. 최대 장점은 그래픽 하드웨어에 가장 빠르게 액세스할 수 있다는 것이지만 Low-Level API 이기 때문에 코드 양이 방대하고 난이도가 높다고 한다. 보다 쉽게 그래픽을 구현할 수 있는 Core Graphics(CGColor, CGRect...)라는 것도 생겼지만 Low-Level이다. 이를 대체하기 위해 만들어진 것이 Core Animation(CALayer...)이며 더욱 더 간편하게 만든 것이 UIKit이다. 따라서 UIKit으..

UIWindowScenehttps://developer.apple.com/documentation/uikit/uiwindowscene UIWindowScene | Apple Developer DocumentationA scene that manages one or more windows for your app.developer.apple.com 앱의 하나 이상의 UIWindow를 관리하며 UIScene을 상속 받고 있기 때문에 관련 메서드 및 프로퍼티에 접근 가능하다.windows - window는 여러 개 가질 수 있다.keyWindows - 윈도우가 여러개 존재할 때 가장 앞쪽에 배치된 윈도우이다.screen - 화면에 보이는 그 자체(UIScreen 객체이니 hardward 영역인 것 같음) UI..

발단상위 ViewModel에서 하위 View를 위해 사용하는 여러 프로퍼티가 존재상위 ViewModel의 책임을 분리하기 위해 하위 View에서만 관련된 상위 ViewModel의 일부를 하위 ViewModel에 분리하위 View에서만 사용하는 연산 프로퍼티는 하위 View에 이동하위 View에도 관련 있는 상위 ViewModel 프로퍼티는 하위 뷰 모델에서 @Binding으로 선언된 프로퍼티에 전달 이전class ParentViewModel: ObservedObject{ @Published var url: String = ""{ didSet{ self.isLoading = true } // URL 관련 비동기 작업이 끝나면 false 처리 됨..
🔥 이슈 위와 같이 탭 바 이동 시 애니메이션 없이 페이지가 전환되게 되는데.... 자칫 딱딱해 보일 수 있는 UI다. class TabBarViewController: UITabBarController, UITabBarControllerDelegate { override func viewDidLoad() { super.viewDidLoad() delegate = self } public func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { guard let fromView =..