IOS
[iOS] Static/Dynamic Library
Library Xcode Target의 일부로 빌드되지 않은 코드 및 데이터 조각을 정의한 것. 라이브러리는 다른 프로젝트에서 재사용 할 수 있는 코드 및 리소스 모음을 나타낸다. 여기에는 특정 기능을 제공하거나 일반적인 프로그램이 문제를 해결하는 미리 작성된 함수, 클래스 및 기타 구성 요소가 포함되어있다. 단순히 코드 및 데이터 조각을 정의했고 이걸 내 앱 코드에 가져다 쓰고싶다. 라이브러리와 앱의 소스코드 파일을 병합(merge)하는 프로세스를 Link라고 한다. 라이브러리는 앱에 Link되는 방식에 따라 두 가지로 나뉘게 된다. Static Library - ".a" 접미사를 가진다 Dynamic Library - "dylib" 접미사를 가진다 Static Library Static Library..
[iOS] Class의 성능을 향상시킬 수 있는 방법들
final, private키워드를 사용해 성능을 향상시킬 수 있다. 여러 방법이 있지만 메서드 디스패치(Method Dispatch)와 관련이 있다. https://clamp-coding.tistory.com/364 [Swift]. Method Dispatch Method Dispatch 실제로 Method는 CPU에대한 명령어이며, 실제론 코드 영역에만 존재한다. 그렇기 때문에 코드 영역에 있는 메서드를 실행시키려면 메서드 주소가 필요하다. 그런데 그 메서드 주소를 clamp-coding.tistory.com final final이 붙은 클래스는 상속이 불가하기 때문에 하위 클래스에서 이들을 오버라이딩 될 수 없게 되므로 자연스럽게 Static Dispatch로 동작하게 된다. private(접근제어)..
[iOS] Boudns와 Frame
Bouns: 뷰의 위치가 뷰 자신의 좌표계에 의해 결정된다. Frame: 뷰의 위치가 부모뷰에 의해 결정된다. Frame Frame은 뷰의 좌표가 부모뷰를 기준으로 결정된다. Bounds Bouns는 본인의 좌표계에 의해 위치가 정해지기 때문에 어느 위치에 있던 (0, 0)을 유지한다. 왜 굳이? 이유를 알기 위해 Frame을 이해해야한다. Frame은 단순히 만드려는 뷰를 나타내는 것이 아니라 만드려는 뷰를 감싸는 사각형 모양의 뷰이다. 그리고 Frame의 좌표와 크기도 이렇게 감싸는 사각형의 좌표와 크기를 나타낸다. Frame은 감싸고 있는 뷰가 회전한다면 그에 맞춰 크기와 좌표가 바뀌게된다. 하지만 Bounds는 본인의 크기와 좌표 (0, 0)을 유지하게 된다. 용도의 차이 Frame: 좌표를 기준..
[iOS] UIResponder
Xcode 프로젝트를 만들면 AppDelegate와 SceneDelegate가 존재한다 이 클래스는 UIResponder를 상속받게된다. https://developer.apple.com/documentation/uikit/uiresponder UIResponder | Apple Developer Documentation An abstract interface for responding to and handling events. developer.apple.com 이벤트에 응답하고 처리하기 위한 추상 인터페이스이다. UIResponder는 터치, 동작 및 키보드 이벤트와 같은 사용자 이벤트에 응답하는 개체의 기본 클래스이다. 즉 애플리케이션의 뷰 계층 구조에 있는 개체로 이벤트를 처리하고 전달하는 역할을..
[iOS] NSObject
iOS의 Cocoa는 NSObject를 상속받는 모든 클래스를 가리키는 단어이다. 따라서 CocoaTouch프레임워크란 iOS환경을 구축하기위한 최상위 프레임워크이며 일반적으로 옵씨에서의 NSObject와 스위프트에서 사용되는 UIKit, Foundation 등에 포함되는 대부분의 클래스가 여기에서 속한다. NSObject는 Objective-C 및 Swift 프로그래밍 언어의 기본 클래스이며 해당 언어에서 대부분의 다른 클래스의 루트 클래스 역할을 한다. UIButton은 UIControl을 상속하고, UIView는 UIResponder, UIResponder는 NSObject를 상속한다. NSObject는 어플리케이션의대부분의 객체에 필요한 기본 동작을 정의하는 클래스이다. 객체를 생성, 복사, 비교..
[iOS] Core Data는 무엇인가.
코어데이터 코어데이터란 넓은 의미에서 앱의 모델계층이자, 데이터베이스, ORM등의 기능을 가진 객체 그래프 관리 프레임워크이다. CoreData는 경량의 고성능 관계형 데이터베이스 엔진인 SQLite를 기반으로 구축되었고 개발자가 복잡한 SQL문을 작성하지 않고도 데이터베이스와 상호작용 할 수 있도록 직관적이고 사용하기 쉬운 인터페이스를 제공한다. 객체 그래프 관리 프레임워크 객체 그래프란 메모리에 있는 객체들과 객체들 간의 관계를 말한다. 예를 들어 Person이라는 객체와 Family라는 객체가 이와 같은 관계로 메모리에 올라간다면 객체들이 어떤 관계를 갖고 있는지를 객체 그래프라고 하는 것이다. 예를 들어 실제 앱의 예시로 보자면 SNS앱에서 게시글이 있고, 게시글에는 댓글들이 있을텐데 두 객체의 ..
[iOS] - Realm을 활용한 Widget(위젯)
Realm과 Widget(위젯) WWDC 에선 Personalized하고 glanceable한 위젯이 좋은 위젯이라고 한다. personalized한 위젯이란? 날씨 위젯처럼 개인이 사는 지역마다 다른 정보를 알려줘야한다. 이런 개인에 따라 맞춤 정보를 제공하는 것을 Personalized라고 한다. glanceable한 위젯이란? 어떤 동작을 하지 않아도 바로 간편하게 원하는 정보를 확인할 수 있는 것을 glanceable한 위젯이라고 한다. WWDC에서 강조한 부분은 위젯은 작은 앱이 아님(Widget are not mini-apps)이다. 위젯은 사용자가 필요한 정보를 볼 수 있게 해주는 전광판이라고한다. 하지만 여러 위젯들을 보면 아래처럼 버튼이 있는 것을 볼 수 있는데 실질적으론 위젯 내부에서 ..
[iOS] Realm과 사용법
Realm이란? 오픈소스이며 모바일에 최적화된 라이브러리이다. 객체지향 데이터베이스로, iOS, Android, React Native등 다양한 플랫폼에서 사용할 수 있으며 로컬에 저장된다. UserDefault는 간단한 데이터만 저장하는 용도이다(id, pw, 간단한 설정과 같은..) 큰 용량을 저장하기엔 무리가있다. ORM이 아닌 *데이터 컨테이너 모델을 사용하고 데이터 객체는 Realm에 객체로 저장된다. *컨테이너가 뭘까. 컨테이너란 OS상에 논리적인 구획(컨테이너)을 만들고, 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션등을 하나로 모아, 별도의 서버인 것처럼 사용할 수 있게 만든것이다. OS의 리소스를 논리적으로 분리시키고 여러개의 컨테이너가 공유하여 사용한다. 컨테이너는 오버..
[iOS] some키워드?
some 키워드? SwiftUI를 공부하며 많이 본 키워드이지만 난 아직 SwiftUI를 깊게 공부하지 않는다 하지만 일단 한번 본다면 some키워드는 Swift5.1의 새로운 기능이다. some 키워드는 연산프로퍼티인 body안에 불투명한 타입이 있음을 나타낸다?? some 키워드는 프로토콜을 준수하는 불투명한 유형을 리턴하기위해 프로토콜과 함께 사용될 수 있다. protocol Shape { func describe() -> String } struct Square: Shape { func describe() -> String { return "I'm a square. My four sides have the same lengths." } } struct Circle: Shape { func desc..
[iOS] KVO(Key-Value Observing)
KVO(Key-Value-Observiing)란? KVO는 A객체에서 A의 변경사항을 B객체에게 알리기 위해 사용하는 코코아 프로그래밍 패턴이다. KVO를 사용하면 다른 개체의 특정 속성이 변경될 때 알림을 받도록 객체를 등록할 수 있다. 프로퍼티 옵저버인 willSet과 didSet이랑 유사하지만 외부에 관찰자를 추가하는것이 다르다. 또한 Objective-C 런타임에 의존하기 때문에 순수한 Swift에서는 그리 좋지 않다고한다...? 따라서 NSObject를 상속받는 클래스로 정의해주어야 하며, 각각의 프로퍼티에는 @objc dynamic 이라는 표시를 해야한다. RxSwift와 유사한 느낌이다? Observing을 위한 Setup class Address { var town: String init(..