일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 네트워크
- 웹
- 후기
- swift concurrency
- 위젯킷
- 알고리즘
- cs
- 영남대
- 스위프트
- 리액트
- 문법
- ReactorKit
- 백준
- c++
- spritekit
- SwiftUI
- 운영체제
- composable architecture
- 컴퓨터그래픽스
- Protocol
- 대외활동
- 멋사
- 스유
- TCA
- Swift
- dispatchqueue
- widgetkit
- uikit
- 멋쟁이사자처럼
- widget
- Today
- Total
목록분류 전체보기 (198)
맛동산이
이재성 씨의 깃허브, ios 면접 준비 질문에 있는 앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가? 에 대한 대답이다. 해당 내용은 app life cycle과 관련되어 있는 내용이다. 앱의 실행과정 UIApplicationMain() uiapplicationMain함수는 application object와 delegate 객체를 생성하고, event cycle을 셋업하기 위한 함수이다. 4개의 파라미터를 받는데 다음과 같다. argc : argv의 개수 argv : argument의 변수 목록 int main( int argc, char* argv[])의 원형에서 따온 argv, argv이다. principalClassName : UIApp..
Concurrent라는 뜻 iOS에서는 time Slicing을 하고 있다. (당연한 이야기) 따라서 single Thread라면, context switching을 통해서 병렬적 작업을 muti Thread라면 parallelism하게 동작한다. DispatchQueue DispatchQueue는 GCD의 쓰레드의 관리를 위한 객체가 존재함 해당 객체의 존재는 serial 과 concurrent queue두개가 존재 serial : task의 시간을 보장해주며, 순차적으로 진행 concurrent : 동시에 여러 task를 수행할수 있음 기본적으로 serial임. let queue = DispatchQueue(label: "start") queue.async { for i in 0...5 { sleep..
이전에도 다양하게 다룬적이 있지만 이제야 좀 정리가 되는느낌이라 다시한번 정리하려고 합니다. Thread 스레드는 cpu에서 바라보는 작업단위이다. 프로그램은 저장소에 저장되어있는 코드 덩어리이고, 이 코드덩어리가 메모리에 올라간 상태를 프로세스라고 한다. 프로세스는 cpu가 할당되어진 프로그램의 상태인것 프로세스 내부에서 동시성(time slicing)방식으로 여러개의 일을 처리할수 있는데, 이때 생성되는 독자적인 프로세스 내부의 작업 단위를 스레드라고한다. ex) 크롬이라는 프로그램이 메모리에 올라가면 프로세스, 해당 크롬에서 여러개의 창이 켜진상태를 여러 스레드가 존재한다고 생각하면 쉽다. Thread pool 위의 스레드 생성방식에서 계속해서 새로운 스레드를 생성하는것은 좀 불필요한 작업일수 있기..
rethrows란 함수를 파라미터로 받는 함수에서 에러가 발생할수 있음을 의미하는 키워드이다. 즉 최소 한개 이상의 에러를 throw하는 함수를 매개변수로 받아야 한다. 간단한 예제는 다음과 같다. enum Errors: Error { case someError } func throwErrors(about value: Int) throws -> Int { if value == 0 { throw Errors.someError } return value } func checkThrow(completion: (Int) -> Int ) { do { try throwErrors(about: 0) } catch (let error) { print(error.localizedDescription) } } checkT..
InterFace 인터페이스란 서로다른 두 시스템의 데이터를 주고 받는 경계면을 의미한다. UserDefaults 앱을 실행하는 경우 지속적으로 key-value로 값을 저장하는 사용자의 기본 데이터 베이스 인터페이스 이다. 즉 앱을 실행하는 동안 사용자의 기본 데이터를 key-value값으로 저장하는 경계면을 의미한다. 런타임에서 userDefaults객체를 이용하여, 사용자의 기본 userDefaults DB에서 기본 설정값을 액세스 하며, UserDefaults는 해당 값을 캐시하여 기본 설정 디비를 열필요 없도록 계속해서 기기에서 값을 가지고 있게 된다. 기본값을 설정하면 프로세스 내에서 동기적으로 변경되며, 비동기적으로 다른 프로세스에 변경사항이 전파된다. UserDefault는 싱글톤으로 단하..
Collection Swift에서는 collection type으로 set, tuple, array, dictionary을 제공하고 있다. collection타입은 sequence, 와 iterator protocol 두개의 프로토콜을 채택하고 있다. 해당 프로토콜에 대해서 공부하고자 하며 더 나아가 asyncSequence에 대해서 공부해보고자 한다. Sequence sequence는 프로토콜로, 해당 프로토콜을 채택하면, 하나하나의 원소를 순회할수 있게 된다. 해당 프로토콜은 make iterator라는 iteratorProtocol을 준수하는 associatedtype(지네릭을 사용하기 위한 플레이스홀더 와 같은 타입)을 정의하고 있다. 이를 통해서 makeIterator 함수를 구현해야하며 해당 ..
기본적으로 physicsBody는 쉐입을 다양하게 줄수있지만, 우리는 보통 해당 물체의 라인에 맞게 physicsbody를 주어야 한다. 그렇지 않으면 맞지도 않았는데 마치 보호막이 존재하는 것처럼 튕겨나갈지도 모르기 때문이다. 해당 부분에 대해서 공식도큐먼트에는 다음과 같이 나타나있다. 저렇게 대충 만들지 말고 쉐입으 딱 맞게 하는방법! let sprite = SKSpriteNode(imageNamed: "Spaceship") sprite.physicsBody = SKPhysicsBody(texture: sprite.texture!, size: sprite.texture!.size())
코어모션은 장치의 가속도계와 자이로스코프, 사용 가능한 경우 보수계, 자력계 및 기압계가 포함한 데이터를 가지고 있는 프레임워크이다. 해당 프레임워크를 가지고 중력센서를 통해서 SpriteKit의 화면에 중력을 작용시켜보자! PhysicsWorld 모든 scene은 자동적으로 물리현상을 구현하기 위해서 physicsWorld를 생성하며, physicsWorld는 SKScene위에 잇는 모든 노드들의 physics 프로퍼티에 접근할수 있다. 따라서 우리는 SpriteKit의 scene의 physicsWorld의 gravity를 줄 예정이다. 중력을 바꾸기 위해서는 중력을 바꾸는 값을 가져와야 하는데 해당 값을 coreMotion으로 기기의 기울기를 통해서 가져올수 있다. CoreMotion을 통해서 기기의..