[Swift] IBOutlet Collection에 weak를 사용하지 않는이유

Yuni·2024년 1월 3일

View

  • VC -> UIView, 뷰객체를 참조 (RC + 1)
  • UIView -> 뷰객체를 참조 (RC + 1)

    VC는 UIView, 뷰객체를 관리하는역할
    뷰객체가 모여 UIView를 이룸.
    뷰객체는 button, label, stepper 등..

  • 강한참조
  • 약한참조

IBOutlet

IBOutlet의 뷰객체는 클래스 형태로 참조되어 저장된다.

IBOutlet Collection

  • IBOutlet과 다르게 IBOutlet Collection에는 weak키워드를 사용할 수 없는 이유는 배열이기 때문일까??
    배열이 구조체이기에 스택영역에 저장될 것 같지만, 컬렉션 타입(Array, Set, Dictionary), String처럼 메모리 공간을 차지하는 크기가 유동적이라면 힙영역에 저장된다.
    • 실제 데이터는 heap 에, 그 데이터를 참조하는 정보는 Stack에 저장되는 것!
  • 힙영역에 저장되면 참조타입이라는건데 왜 weak를 사용할 수 없을까??
    배열안에 클래스형태로 뷰객체가 참조되어저장되는데 weak를 사용해 메모리에서 해제하면 해당 배열에 속한 다른 뷰객체들도 메모리에서 해제됨.
    -> 해제된 후 배열안의 다른 뷰객체를 사용하고자하면 런타임에 에러가 발생하는 것!

1개의 댓글

comment-user-thumbnail
2024년 1월 5일

정말 유용합니다..!!!

답글 달기