본문 바로가기

iOS/Swift6

메모리 누수가 발생하는 상황 : 강한 참조 사이클 + 해결방안? 이 포스팅을 보기전 RC가 무엇인지 모른다면 아래 포스팅을 먼저 보시면 도움이 되실거 같슴다 ^.^ https://yesiamnahee.tistory.com/168 힙 메모리 관리 - ARC 정리 힙 메모리를 왜 관리해야할까? 스위프트에서 값 형식은 스택에 저장이 되고 그 스택의 스코프가 종료되면 메모리에서 자동으로 제거되기 때문에 메모리 관리를 할 필요가 없다 ! 그에 반해, yesiamnahee.tistory.com 메모리 누수는 강한 참조 사이클이 있을때 발생한다. 강한 참조 사이클이란? 클로저와 인스턴스가 강한 참조로 서로를 가르키고 있다면 강한 참조 사이클(Strong Reference Cycle)발생. 객체간의 강한 참조 사이클 예시 lass Dog { var name: String var o.. 2022. 1. 17.
힙 메모리 관리 - ARC 정리 힙 메모리를 왜 관리해야할까? 스위프트에서 값 형식은 스택에 저장이 되고 그 스택의 스코프가 종료되면 메모리에서 자동으로 제거되기 때문에 메모리 관리를 할 필요가 없다 ! 그에 반해, 참조형식은 힙 영역에 저장이 되고 힙은 동적할당을 하기 때문에 우리는 메모리 관리를 해야한다. 여기서 동적할당은? 🧐 힙이라는 공간은 저장할 공간이 정해져있지않고 스캔을 해서 비어있는 공간에 할당을 한다는 개념! 힙에 할당되는 데이터를 관리를 하지 않는다면 (데이터가 필요 없음에도 할당이 해제되지 않는다면) 메모리 누수 (Memory Leak) 현상이 발생한다! (메모리가 쌓이기만 하고 지워지지 않으면 메모리가 많은 공간을 차지하고 앱이 꺼지는 현상이 발생할 수 있음) 그럼 힙 영역의 메모리를 관리를 어떻게 해야할까?! 일.. 2022. 1. 13.
클로저의 메모리 구조 + 캡처현상 / 캡처리스트 일단 클로저의 메모리 구조를 정리하기 전에 클로저가 무엇인지? 간단하게 정리해보자. 클로저는 이름이 없는 함수이다. 그럼 클로저는 왜 함수 이름이 필요 없을까? 클로저는 주로 콜백 함수 형태로 사용하기 때문에 이름이 필요 없다. * 여기서 콜백 함수는? 🧐 다른 함수의 인자로 사용되는 함수 어떤 이벤트 후 호출되는 함수 그럼 이러한 클로저는 왜 사용될까? 콜백 함수로 클로저의형태가 간단하기도 하고 사후적 정의가 가능하기 때문! 클로저가 무엇인지 대충 정리했으니, 이제 클로저의 메모리 구조에 대해 정리해보자! 클로저는 참조 형식이기 때문에 클래스처럼 값을 힙 메모리에 저장을 한다. (클로저의 실제 명령어는 당연히 코드 영역에, 코드 영역을 가리키는 주소는 힙!! 에 저장, 클로저도 함수일 뿐이기 때문에 실.. 2021. 12. 22.
클래스&구조체 메모리 관점에서의 차이 이번 포스팅에서는 클래스와 구조체의 가장 큰 차이 2가지 1. 메모리 저장 방식 2. 상속 가능 여부 중 메모리 저장 방식 차이에 대해 정리할 것이다! (아래 코드들은 playground에서 실행했기 때문에, main 함수 안이라고 가정한 뒤 공부한 것입니다. 즉, 전역 변수가 아닌 main 함수의 스택 영역이라고 생각하며 코드를 작성한 것입니다.) 클래스 예시 1. class Dog { var name = "강아지" var weight = 0 func sit() { print("\(self.name)가 앉았습니다.") } func layDown() { print("누웠습니다.") } } // 객체 생성 var bori = Dog() var choco = Dog() // 객체의 속성에 접근 choco.n.. 2021. 12. 17.