본문 바로가기

memory3

[Swift] weak/unowned self는 언제 사용해야 할까? ARC에서 발생할 수 있는 Strong Reference Cycle로 인한 메모리 누수를 방지하기 위해 weak self 또는unowned self 를 사용하게 됩니다. 주로 클로저에서 weak self를 사용하고는 하는데 모든 클로저에 weak self를 사용해야 하는지, 그렇지 않다면 어떤 부분에 weak self를 사용해야 하는지 알아보고자 찾아본 내용을 정리하고자 글을 쓰게 되었습니다. Escaping, non escaping closure 여부 일반적으로 @escaping 키워드가 붙지 않은 클로저의 경우, 클로저의 scope 내에서 즉시 실행됩니다. 따라서 weak이나 unowned 를 사용할 필요가 없다고 하네요. 그러나 escaping closure의 경우 weak이나 unowned를 사용.. 2022. 2. 14.
[Swift] lazy 프로퍼티 알아보기 이번 글에서는 Swift의 lazy 프로퍼티에 대해 알아보겠습니다. lazy property란 무엇인가? lazy property, 정확히 지연 저장 프로퍼티(lazy stored property)는 처음 사용되기 전까지 초기값이 계산되지 않는 프로퍼티를 의미합니다. 간단히 말해, 내가 만든 프로퍼티를 사용하기 전까지 메모리에 올려두지 않겠다는 의미입니다. lazy property는 프로퍼티의 초기값이 초기화가 끝나기 전까지 알 수 없는 외부 값에 의존적인 경우 유용합니다. 또한 초기값이 복잡한 계산나 셋업이 필요하지만 필요할 때까지 실행되지 않아야 할 때에도 유용합니다. 주의할 점 lazy 키워드가 붙어있다고 해서 해당 프로퍼티가 한 번만 초기화된다는 것을 보장하는 것은 아닙니다. 만일 멀티스레드환경에.. 2021. 10. 26.
메모리 주소공간(Code, Data, Stack) 알아두기 값 타입과 참조 타입을 공부하다 흘러흘러 메모리 주소공간에 대해 복습하고자 글을 쓰게 되었습니다. 이번 글에서는 메모리 주소공간이 무엇인지, 세부 영역은 무엇이 있는지, 그리고 세부영역인 stack, heap이 차이가 무엇인지 간단히 적어보았습니다. 메모리 주소공간은 무엇인가? 주소란 메모리의 특정 위치를 말합니다. 프로그램이 실행되면 운영체제는 프로세스 주소 공간(Process Address Space)을 메모리에 할당해주게 됩니다. 이때 할당해주는 메모리공간은 Code, Data, Stack, Heap 으로 나뉩니다. Code, Data, Stack, Heap 그럼 영역별로 하나씩 살펴보겠습니다. Code 해당 프로세스의 기계어 코드를 담고 있습니다. 컴파일 시에 영역의 크기가 결정됩니다. Data .. 2021. 10. 14.