목록Swift (63)
study record
Retain Retain 즉 순환참조 여부를 묻는 것이다. retain : 메모리가 해제되지 않아서 낭비되는 현상을 의미 (Memory Leak) Delegate Delegate 패턴은 어떤 객체가 해야할 일을 대신 처리하도록 프로토콜을 채택하여 위임하는 것 프로토콜에서 필요한 일들을 먼저 작성한다. tableView.delegate = self 이후 프로토콜을 채택하여 위임자(동작을 대신해줄 사람)가 누구인지 알려주면 프로토콜에 정의된 여러 메소드들을 self에서 사용하겠다는 뜻이다. 1. 프로토콜 안에 특정 기능을 할 함수들을 깡통함수로 선언 2. 프로토콜을 변수로 선언 3. vc에서 프로토콜 채택 4. 프로토콜 변수에 self로 대리자 위임. 5. 관련 업무 수행하도록 구현 Delegate의 Ret..
클로저란? 어떤 기능을 하는 코드를 하나의 블럭으로 모아놓은 것이다. 함수도 클로저의 한 형태이다. 클로저의 큰 특징은 클로저가 선언된 위치에서 어떤 상태를 캡쳐하고 참조를 얻을 수 있다는 것이다. 탈출 클로저 Escaping Closure 탈출 클로저란 @escaping 가 붙은 클로저로 함수가 반환된 후 밖에서 실행시키는 클로저이다. 이를 활용하여 기존에 있던 함수 범위 내부의 자원들을 활용해서 비동기적 작업을 할 수 있다. 함수의 매개변수로 클로저를 전달하고, 전달받은 클로저를 실행하여 함수를 탈출한다. Swift에서는 함수의 파라미터로 전달된 클로저는 기본적으로 "함수 내부 스코프 안에서만" 사용이 가능하다. 기본 클로저는 함수 내부를 탈출할 수 없다는 의미에서 "탈출 불가"속성을 가지고 있다. ..
순환 참조(retain cycle)이란? 언제 발생하는가? 어떻게 처리해야 하는가? 순환 참조란? 순환 참조는 두 가지 이상의 객체가 서로에 대한 Strong Reference(강한 참조) 상태를 가지고 있을 때 발생하며, 순환 참조가 발생하게 되면 서로에 대한 참조가 해제되지 않기 때문에 메모리에서 유지되며 이로 인해 메모리 릭이 발생하게 된다. 이러한 메모리 누수 문제를 해결하기 위해 weak, unowned reference가 사용된다. 강한 참조 참조의 기본은 강한 참조로, 별도의 식별자를 명시하지 않으면 강한 참조를 한다. ARC가 해당 인스턴스를 해제하지 않고 유지해야 하는 명분을 제공하는 것이다. 인스턴스를 다른 인스턴스의 프로퍼티, 변수, 상수 등에 할당할 때 강한 참조를 사용하면 참조 횟..
프로젝트를 리팩토링하는 과정에서 어떤 값에 대해서 전달해주기가 너무 애매한 상황이 발생했다. 그래서 임시적으로 static var로 프로퍼티를 선언해두고 다른 곳에서 접근하기 쉽도록 임시방편해두었는데, 이게 좋은 방법인지 제대로 알아두고자 작성하게 되었다. 스위프트에서 static은 싱글톤 패턴을 적용할 때 사용했던 적이 있었다. static을 사용하면 프로그램이 종료될 때까지 메모리에 사라지지 않고 남아있기 때문에 많이 사용하는 것은 좋지 않다고 알고 있었다. static 프로퍼티는 애플리케이션 전체에서 유지되어야 하는 전역 설정을 객체 생성 없이 진행할 수 있다는 장점이 있다. 따라서 많은 객체를 생성하지 않아도 되어 비용을 줄일 수 있다. 인스턴스가 생성될 때마다 새로운 값이 필요하지 않은 경우, ..