반응형

전체 글 104

5. iOS 강한참조(strong), 약한 참조(weak), 미소유 참조(unowned

5-1. 개요 저번 포스팅에서는 순환참조가 왜 일어나는지 포스팅을 했었는데 이번에는 순환참조가 일어나지 않게 할려면 어떻게 해야하는지에 대해 포스팅할 예정이다. Swift에서 Reference Type을 선언할 때 변수인지 상수인지를 결정하는 let과 var이란 키워드가 있는건 모두가 알고 있지만 이 키워드 앞에도 어떻게 참조할 것인지에 대해 정의해주는 키워드가 존재한다. 바로 strong과 weak와 unowned이다. 총 3가지인데 오늘은 참조 키워드에 대해 포스팅할 예정이다. 5-2. Strong(강한 참조) 개요에서 총 3개의 키워드가 있다고 했지만 swift에 strong이라는 키워드는 없다. 즉, 아무 키워드도 사용하지 않으면 강한 참조로 인식한다는 이야기이다. 강한 참조로 Reference ..

Swift 2022.07.28

4. iOS GC와 ARC의 차이점, 순환참조

4-1. 개요 iOS 메모리 관리 기법에 ARC가 있다면 타 언어에서는 GC(Garbage Collector)가 있다. 거의 비슷한 방식으로 동작하지만 둘의 차이점은 엄연히 존재한다. 오늘은 이 차이점에 대해 공부하고 순한 참조가 무엇이고 어떤 식으로 발생하는지 알아볼 예정이다. https://daesiker.tistory.com/104 4-2. GC(Garbage Collection) GC방식은 프로그램이 실행 중일 때 Garbage Collector라는 것이 동적으로 감시를 하고 있다가, 더 이상 사용할 필요가 없다고 여겨지는 인스턴스를 메모리에서 해제시키는 방식이다. ARC랑 비슷하지만 여기에는 몇가지 차이점이 있다. GC 참조 계산 시점 런 타임 프로그램을 실행하는 동안 주기적으로 검사하여 사용하..

Swift 2022.07.19

3. iOS 메모리 관리(ARC, MRC)

1. 개요 iOS의 메모리 영역 중 힙영역을 관리하는 방법은 2가지가 있다. ARC와 MRC란 기법이 있는데 Objective-C에서는 프로젝트 설정을 통해 MRC나 ARC 중 선택하여 사용할 수 있고 Swift에서는 ARC만 사용한다. 이번 포스팅에서는 이 2가지 메모리 관리 기법에 대해 알아볼려 한다. 1-1. ARC(Auto Reference Counting) ARC를 알아보기 전에 ARC가 어떤 메모리 영역을 관리하는 지 알아야한다. 바로 힙영역을 관리하는데 힙영역은 참조타입의 데이터를 관리하는 영역이다. 즉 클래스나 클로져를 메모리에 할당, 해제할 때 ARC를 사용한다 참조타입과 값타입 확인하기 ARC는 Auto Reference Counting의 약자로 힙영역에 할당돼있는 데이터를 참조하는 지..

Swift 2022.07.12

2. iOS 값타입(Value Type)과 참조타입(Reference Type)

2-1. 개요 타입은 데이터를 전달하는 방식에 따라 값타입(Value Type)과 참조타입(Reference Type)으로 나뉜다. 값 타입(Value Type) Struct Enum Tuple 참조 타입(Reference Type) Class Closure 대표적인 값타입으로는 구조체, 열거형, 튜플 등이 있고 참조타입은 클래스나 함수 등이 있다. 여기서 Struct와 Class를 이용해서 메모리에 어떻게 할당되고 해제되는지 알아볼 예정이다. 2-2. Class -Source Code class Human { var age:Int var name:String init(_ age: Int, _ name: String) { self.age = age self.name = name print("\(name)..

Swift 2022.07.05

1.iOS 메모리 구조

1. 개요 xCode를 통해 프로젝트를 만들어 시뮬레이터나 실제기기를 통해 실행을 시키면 해당 운영체제(OS)는 메모리(RAM)에 이 프로그램을 위한 공간을 할당해 준다. 총 4가지의 공간으로 나뉘어져 있는데 코드영역, 데이터 영역, 힙 영역, 스택 영역이 존재한다. 각 영역이 어떤 특징을 가지고 있는지 알아보자 ✱ 컴파일 타임(Compiletime) : 우리가 만든 소스코드가 기계어 코드로 변환되어 실행 가능한 프로그램이 되는 과정 ✱ 런 타임(Runtime) : 사용자에 의해 실행되어 지며, 응용프로그램이 동작되어지는 시간 1-1. 코드 영역 코드 영역은 프로그램의 소스코드가 기계어(Binary) 형태로 저장되는 영역이다. 컴파일 타임에 결정되고, 중간에 코드가 바뀌지 않도록 읽기전용(Read-Onl..

Swift 2022.06.28

6. RxSwift Relay, Signal, Driver

1. Relay Relay는 RxSwift 프레임워크가 아닌 RxCocoa에서 다루는 타입이다. Relay는 Subject와 비슷하지만 한가지 크게 다른 점이 있다. onComplete()와 onError 이벤트가 없는 것이다. 오직 onNext()이벤트만 존재하며 구독자가 Dispose 되기 전까지 종료되지 않는다. 그래서 실시간으로 UI를 변경해야할 때 Subject 대신에 Relay를 쓴다. Subject와 다른 점 onNext() 대신에 accept()을 사용하여 이벤트를 생성한다. value를 통해 마지막으로 전달된 이벤트를 확인할 수 있다. import RxCocoa let bag = DisposeBag() let publishRelay = PublishRelay() publishRelay.a..

RxSwift 2021.10.07

5. RxSwift Subject

1. Hot Observable vs Cold Observable Observable은 Hot Observable과 Cold Observable로 크게 2가지 종류로 나뉜다. Hot Observable Hot Observable은 Observable을 생성하자마자 아이템들을 방출해준다. 따라서 Observable을 생성해도 Subscribe를 하지 않았다면 Item을 방출하기 때문에 아무런 결과가 안나온다. Subscribe를 할 때 방출한 아이템부터 사용이 가능하기 때문에 Observable의 생성 시점과 Subscribe의 호출 시점이 중요하다. 마우스 이벤트, 키보드 이벤트, 시스템 이벤트에서 주로 사용된다. Cold Observable Cold Observable은 Hot Observable과 반..

RxSwift 2021.10.03

4. RxSwift Operator(2)

1. Combining Operators StartWith 이벤트를 방출하기 전 startWith의 파라미터 값 이벤트를 첫번째로 방출한다. 2개 이상 사용가능하며 마지막으로 사용한 startWith의 파라미터부터 방출한다. let bag = DisposeBag() let numbers = [1, 2, 3, 4, 5] Observable.from(numbers) .startWith(-1, 0) .startWith(-2) .subscribe { print($0) } .disposed(by: bag) // -2 // -1 // 0 // 1 // 2 // 3 // 4 // 5 예제를 보면 가장 마지막에 호출한 startWith의 파라미터인 -2부터 방출된걸 알 수 있다. Concat concat은 2개 이상의..

RxSwift 2021.09.30

3. RxSwift Oporator(1)

1. Operator란? Operator은 Observable을 생성하거나 변환해주는 도구이다. String에서 대문자를 소문자로 변환해주는 lowercased(), 배열에서 배열이 비어있는지 확인할 수 있는 isEmpty처럼 Observable에서도 다양한 연산을 쉽게 처리할 수 있도록 도와주는 것이 바로 Operator이다. 아래 ReactiveX의 링크를 보면 Operator의 종류가 다 나와 있는 것을 알 수 있는데 오늘은 가장 많이 쓰이는 Operator들을 정리할 예정이다. 나머지 Operator에 대한 내용은 아래 링크에 자세하게 나와있고 내용이 너무 없거나 간소화 되어 있는 함수들은 RxJava나 RxJS 탭에 가서 검색을 하면 더 자세히 알 수 있다. http://reactivex.io/..

RxSwift 2021.09.07

2. RxSwift Observable이란?

1. 개요 보통 RxSwift로 프로젝트를 짰다고 하면 RxSwift 프레임워크와 RxCocoa 프레임워크를 사용해서 MVVM 디자인 패턴으로 짜여진 프로젝트를 말한다. RxSwift는 코드를 새로운 데이터에 반응하며 순차적으로 처리하게 함으로써 비동기 프로그래밍을 쉽게하도록 도와준다. 한마디로 비동기 프로그래밍을 위한 프레임워크이다. RxCocoa는 RxSwift의 동반 라이브러리로써 UIKit과 Cocoa 프레임워크 기반 개발을 지원하는 모든 클래스를 보유하고 있다. 말 그대로 UI component 요소들을 RxSwift로 만든 함수와 연결시켜주는 것이다. 결론적으로는 2개의 프레임워크를 사용해야하는 것인데 이 2가지를 완벽하게 사용할려면 우선 RxSwift를 이해하는 것이 중요하다. http://..

RxSwift 2021.09.02
반응형