ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS]Retain Cycle이 무엇인가? ( ARC,MRC)
    카테고리 없음 2022. 9. 14. 13:49

    일단 정신을 바짝 차려한다.

     

    이것이 무엇인지 알려면.. ARC, MRC 까지 알아야하니까!

     

     

    Retain Cycle는 결론만 말하면
    "연결 상태를 String, Weak, unowned로 각각의 상황에 따라서 약하게 연결할지 강하게 연결할지를 결정하는 것"

     

    이라고 말할 수 있다.

     

    이게 뭐냐고 하면..메모리 관리 기술에 관한건데..

     

    그럼 메모리 관리기술은뭔데?

    메모리 관리는 왜하는데?

    까지 생각이 들어갈 수 있으므로 하나하나 이야기를 해보겠다.

     

    우리의 자원인 메모리는 한정적이다 ( RAM 8G ) 이렇게 한정적이다.

    우리는 한정적인 자원을 사용해서 프로그램을 사용해야하고 동작해야한다. 

    왜냐면 메모리가 많아지면 컴퓨터는 많은 양을 가지고 있기 때문에 느려지고, 어느정도 이상 메모리를 사용하게되면 핸드폰 내에서 다른 앱들을 보호 하기위해 그 앱을 꺼버리기 떄문이다.

     

    느려진다, 앱이 꺼진다 라는 현상은 사용자 이탈과 서비스제공이 원할하지 않는 문제를 초래하므로 문제가 되는 상황이다.

    ( 은행어플에서 송금하는데만 5분이 걸린다면 ... 끔찍! 근데 하다가 꺼져서 다시해야되... 그럼 난 그 어플 지울꺼같다 ㅋㅋㅋ)

    그래서 우리는 메모리 관리를 해야한다!

     

    왜 이러한 형상이 생겨나는가? 

    쓸모없는 메모리를 가지고있다. -> 메모리가 새고 있다.

    이것을 우리는 메모리 닉(메모리 누수) 현상이라한다.

     

    이 현상을 막아 줄 수 있는 애!!!

    메모리 릭 현상을 자동으로 막아주는 게 ARC(AUTO REFERANCE COUNTION)다.

     

    ARC도 갑자기 생겨난 애가 아닌데

    ARC가 나타나기전에 MRC(Menual Reference Coution)가 있었다.

     

    MRC는 Objective-C 시절에 메모리 관리를 했던 애로 "참조한 갯수를 새서 관리"하는 애다.

     

    레퍼런스란?
    $1234주소값이 존재하는 메모리 공간에 이름을 부여하는 행위

    var aaa :Int // int길이의 메모리공간을 주세요. 그이름은 aaa라고 부를꺼에요.

    어떤 레퍼런스를 참조하였다면 참조 당한 레퍼런스를 코드로 retain 해주고 참조값을 +1

    그 레퍼런스가 Nil값이 되거나 쓸모없어 졌다고 생각하면 Release라고 써주고 참조값을 -1 해주는 거다.

     

    예를들어 

     

    fun aa {

       let c = 1 // [retain +1]

       b = c // [release -1]

    }

     

    void main {

      var b = 0 // [retain +1]

      aa()

    }

    [release -1]

     

    retain.vale = 2

    release.value = -2

     

    짝갯수가 맞으면 메모리 누수가 없다는 것으로 판단하는거다!!

     

     

    쪼아!!

     

    그럼 MRC가발전한 거라면 ARC는 문제!!

    이 참조한 갯수를 세서 관리하는 애를 자동으로 해주는 것!

     

    오케이 그럼?! 자동으로 관리해주는데 

    굳이?? 왜?? 잘되고 있는거아니야? 할 수 있다.

     

    근데 얘가 원리 원칙인애라서 레퍼런스가 참조당할떄 +1 그 인스턴스가 쓸모없어졌다고 판단 될때만 -1를 하기떄문에 문제가 발생한다.

    왜?? 아니... 

     

    만약! 서버와 통신을 하는데 

    10초가 지났는데도 연결이 안되면 이제 그만~ 하고 기다림의 메모리를 다른 쪽에서 사용할 수 있게 헤제 시켜줘야하는데

    (데이터를 주세요~ 라는 연결이 쓸모없다고 판단되지 않으면 그것은 계속 잡고 있기떄문에 ...근데 사용자는 10 초 지났자나!! 필요없는거라구~~~ 이렇게 이런느낌? 그래서 메모리 누수가 있다 )

     

     

    https://fomaios.tistory.com/entry/%EB%A6%AC%ED%85%8C%EC%9D%B8-%EC%82%AC%EC%9D%B4%ED%81%B4

     

    [iOS 면접질문] ARC(Auto Reference Counting)란?

    안녕하세요 Foma 입니다!! 이번 시간에 알아볼건 바로 "ARC(Auto Reference Couting)" 라는 것인데요. Memory 이 ARC기법은 바로 iOS에서 메모리 관리를 해주는 핵심입니다. "왜 메모리 관리를 해주어야 되는데

    fomaios.tistory.com

     

     

     

     

     

     

Designed by Tistory.