CALayer를 사용할 때 발생하는 메모리 크래시

2024. 11. 29. 10:32·UIKit

안녕하세요...!

이번에도 글을 쓰고 있는 임정현입니다...

저희 버튼에는 그림자가 들어가는데 말입니다...

이 그림자를 뷰한테 줬다가 뺐어야하는데, 주는 거는 됐는데, 뺐을 때 문제가 생겼습니다...

그래서 CALayer[카-레이어]를 쓸 때 저랑 같은 문제를 겪는다면 이 방법을 한번... 츄라이..!

문제 상황

그림자를 넣는데 CALayer때문에 에러가 계속 났다. 아니, 처음에는 CALayer에러인줄도 몰랐다. 아래 처럼 이상하게 에러가 발생했기 때문이다.


문제 해결

그래서 왜 발생하지.. 하면서 이것저것 ViewModel이 문젠가.... 컴바인이 문젠가... 하..... 왜지 하다가 CALayer를 딱 지우니까 오류가 안나서 여기서 뭔가 있다는 것을 느꼈다. (문제 발생 5시간만에)

 

그래서 removeFromSuperlayer 에서 발생한 것을 알았다.

레이어를 하나만 들고 그것을 계속 재활용하는 방식으로 개선하여 해결했다.

view.layer.sublayers?.last?.removeFromSuperlayer()
// 대충 이렇게 되어있던 코드를
myShadowLayer.removeFromSuperlayer()
// 이런식으로 바꿔주었다.

 

뭔가 마지막에 추가했다고 그것이 내가 추가한 layer임을 확신할 수 없다는 것을 깨달은 순간이었다.

추후 들어보니 shadowLayer클래스를 서브타입으로 만들고 sublayers를 돌면서 해당 서브타입인지 확인한다... 도 있는데 굳이? 라는 생각에 그냥 sublayer를 들고있기로 했다.


배운 점

CALayer를 조작할때 뷰에서 조작하지 말자…

CALayer에게 뷰에서 내려오라고 조작하자.


참조 링크

Crash when removing layer · Issue #2 · RayJiang16/XYColor

'UIKit' 카테고리의 다른 글

무지성 MainActor를 붙인 상황에서 데이터가 로드되기 전에 뷰가 그려지는 문제 해결  (0) 2024.12.02
뷰 그리는 방식에 대한 논의(Factory vs MH커스텀 vs VC에서 설정)  (0) 2024.12.02
CollectionViewCell들 간의 Drag & Drop 구현하기  (1) 2024.12.01
런타임 시점에 Constraint를 조절하여 애니메이션 구현하기  (1) 2024.11.19
iOS 15.0 이상에서 UIButton 안에 있는 이미지 사이즈 조절하기  (1) 2024.11.18
'UIKit' 카테고리의 다른 글
  • 뷰 그리는 방식에 대한 논의(Factory vs MH커스텀 vs VC에서 설정)
  • CollectionViewCell들 간의 Drag & Drop 구현하기
  • 런타임 시점에 Constraint를 조절하여 애니메이션 구현하기
  • iOS 15.0 이상에서 UIButton 안에 있는 이미지 사이즈 조절하기
집주인들의 기술 블로그
집주인들의 기술 블로그
Memorial-House 집주인들의 기술 블로그
  • 집주인들의 기술 블로그
    Memorial House
    집주인들의 기술 블로그
  • 전체
    오늘
    어제
    • 🏠 집주인들 글 모아보기 (30)
      • iOS (5)
      • Combine (0)
      • Swift (7)
      • UIKit (7)
      • Xcode (6)
      • Architecture, Design Patter.. (3)
      • 기획 (1)
      • Github actions (1)
  • 링크

    • Github-Repository
    • Github-Wiki
    • Notion
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
집주인들의 기술 블로그
CALayer를 사용할 때 발생하는 메모리 크래시
상단으로

티스토리툴바