[swift] Swift SkeletonView 메모리 관리 방법

SkeletonView는 iOS 앱에서 로딩 상태를 시각적으로 표시하기 위한 뷰 라이브러리입니다. 이는 주로 데이터를 가져오거나 로딩하는 동안 사용자에게 로딩 상태를 알려주는데 사용됩니다. 하지만 SkeletonView를 사용할 때 메모리 관리에 주의해야 합니다. 이 글에서는 Swift에서 SkeletonView를 사용할 때 메모리 관리를 위한 몇 가지 방법을 소개하겠습니다.

1. 뷰 컨트롤러에서 SkeletonView 사용

SkeletonView는 주로 뷰 컨트롤러에서 사용되는 경우가 많습니다. 이 경우, SkeletonView를 뷰 컨트롤러의 수명 주기와 관련해서 제대로 관리해야 합니다.

1-1. 메모리 해제

SkeletonView를 사용하는 동안 메모리 누수를 방지하기 위해, 뷰 컨트롤러가 해제될 때 SkeletonView를 정리해야 합니다. 이를 위해 viewWillDisappear(_:) 메서드를 사용할 수 있습니다. 예를 들어, 다음과 같이 SkeletonView를 해제할 수 있습니다.

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // SkeletonView 해제
    tableView.hideSkeleton(reloadDataAfter: true)
}

1-2. 불필요한 애니메이션 중지

SkeletonView에는 로딩 시 애니메이션이 포함되어 있습니다. 그러나 뷰 컨트롤러가 화면에서 사라질 때 이러한 애니메이션을 중지해야 합니다. viewWillDisappear(_:) 메서드에서 애니메이션을 중지할 수 있습니다. 예를 들어, 다음과 같이 애니메이션을 중지할 수 있습니다.

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // SkeletonView 애니메이션 중지
    tableView.stopSkeletonAnimation()
}

2. 셀에서 SkeletonView 사용

SkeletonView를 테이블 뷰 또는 컬렉션 뷰 셀에서 사용한다면, 셀의 재사용에 따른 메모리 관리도 고려해야 합니다.

2-1. 셀 재사용 전 SkeletonView 해제

셀이 재사용되기 전에 SkeletonView를 해제해야 합니다. prepareForReuse() 메서드를 사용하여 재사용 전에 SkeletonView를 해제할 수 있습니다. 예를 들어, 다음과 같이 SkeletonView를 해제할 수 있습니다.

override func prepareForReuse() {
    super.prepareForReuse()
    // SkeletonView 해제
    avatarImageView.hideSkeleton()
    nameLabel.hideSkeleton()
}

2-2. 다른 데이터로 셀 업데이트 시 SkeletonView 중지

셀이 다른 데이터로 업데이트될 때, 이전 데이터로 인해 보여지는 SkeletonView 애니메이션을 중지해야 합니다. setData(_:) 메서드 또는 데이터를 설정하는 메서드에서 SkeletonView 애니메이션을 중지할 수 있습니다. 예를 들어, 다음과 같이 SkeletonView 애니메이션을 중지할 수 있습니다.

func setData(_ data: Data) {
    // SkeletonView 애니메이션 중지
    avatarImageView.stopSkeletonAnimation()
    
    // 데이터 설정
    nameLabel.text = data.name
    // ...
}

3. SkeletonView 사용 중 제한하기

SkeletonView를 사용 중인 동안 사용자가 상호 작용하여 다른 뷰로 이동하게 되면, SkeletonView의 사용을 제한하는 것이 좋습니다. 이를 통해 불필요한 리소스 소모를 방지할 수 있습니다. 예를 들어, 다음과 같이 사용자 상호 작용 중에만 SkeletonView를 표시하도록 할 수 있습니다.

skeletonView.isSkeletonable = UIApplication.shared.applicationState != .active

위의 코드는 애플리케이션이 활성 상태일 때만 SkeletonView를 표시하도록 설정합니다.

결론

Swift에서 SkeletonView를 사용할 때, 메모리 관리에 주의해야 합니다. 뷰 컨트롤러나 셀의 수명 주기와 관련된 메서드를 활용하여 SkeletonView의 해제, 애니메이션 중지 및 재사용 전 SkeletonView 해제를 적절하게 처리해야 합니다. SkeletonView 사용 중에는 필요한 경우에만 표시되도록 제한하는 것이 좋습니다.


참고 자료: