UIView.animate () : 애니메이션 블록에서 self에 대한 약한 참조가 필요합니까?

또 다른 친구

몇 가지 조사를 한 후 앱 UIView전체에서 여러 애니메이션으로 인해 내 앱이 너무 많은 에너지를 사용하고 있음을 발견했습니다 . 여기서 관련 정보 UIViewController를 약하게 참조하지 않고 완료 블록에서 캡처하고 있었습니다.

그래서 실제로 이것을 변경했습니다.

func animate() {
    UIView.animate(withDuration: 0.3, animations: {
        self.label.alpha = 0.5
    }) { _ in 
        self.animate()
    }
}

이것으로 :

func animate() {
    UIView.animate(withDuration: 0.3, animations: {
        self.label.alpha = 0.5
    }) { [weak self] _ in 
        self?.animate()
    }
}

그러나 animation블록 ( self.label.alpha = 0.5하나)에 대해 똑같이 해야하는지 알고 싶습니다 .

도와 주셔서 감사합니다

Fattie

물론, 당신이 필요 할 거기에 "약한자가"개념을 사용합니다.

사실 참고 : 애니메이션 중에 VC가 폐기되는 상황 은 실제로 매우 일반적 입니다. 따라서 실제로 약한 자아 아이디어를 사용하는 데 "가장 필요한"장소 중 하나입니다. 애니메이션에서 그것을 잊어 버리는 것은 프로젝트에서 매우 흔한 실수입니다.

그건 그렇고, 약한 자기가 필요할 때마다 편리한 구문이 있습니다.

func animate() {
    UIView.animate(withDuration: 0.3, animations: { [weak self] in
        guard let self = self else { return print("gotchya!") }
        self.label.alpha = 0.5
    }) { [weak self] in
        guard let self = self else { return print("gotchya!") }
        self.animate()
    }
}

이 줄 추가 ..

        guard let self = self else { return }

.. 약간 긴 바람처럼 보일 수 있지만 "?"가 필요하지 않다는 의미입니다. 긴 블록에서 사용할 때마다 "self"뒤에.

종종 그러한 블록 안에서 "self ..."를 많이 사용하게되며 "let self = self"관용구를 사용하는 것이 더 일관된 것처럼 보입니다.

여기에 이미지 설명 입력

따라서 블록에 한 줄의 코드 만 있더라도 (두 예제에서와 같이) 모든 곳에서 절대적으로 일관성을 유지하고 일을 단순하게 유지하는 좋은 방법입니다.

당신이 가지고있을 때마다 당신은 { return }단지 당신이 개발하는 동안 무슨 일이 일어나고 있는지 알 수 있도록 print 문을 추가 할 수 있습니다.

.... { [weak self] in
  guard let self = self else { return print("I avoided a crash, woot!") }

또는

.... { [weak self] in
  guard let self = self else { return print("logical disaster near line 66") }

그렇게 할 필요는 없습니다. "{return}"은 괜찮습니다. 귀하의 편의를위한 것입니다.

도대체이 "자기 = 자기"사업은 무엇입니까?

"self = self"관용구가 헷갈 린다면 ....... 솔직히 걱정하지 마세요. 항상 그 관용구를 사용하십시오. 정말 모든 곳에서 볼 수있는 "표준"일뿐입니다.

항상 코드베이스에서 단순한 일관성을 유지하십시오!

더 약한 자기 미스터리 ...

다음은 잘 생긴리스트 멤버의 흥미로운 QA입니다 . 약한 자아는 어디로 가나 요?

나중에 걱정해야 할 혼란이 있습니다 . 약한 참조와 소유하지 않은 참조의 차이점은 무엇입니까?

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

UIPageController의 공유보기에 대한 UIView 애니메이션

분류에서Dev

하위 뷰에 대한 참조가 약해야합니까?

분류에서Dev

ARC에서 dealloc 메서드는 self에 대한 약한 참조를 포함하는 메서드 / 블록을 호출하여 weakSelf = nil이됩니다.

분류에서Dev

ARC에서 dealloc 메서드는 self에 대한 약한 참조를 포함하는 메서드 / 블록을 호출하여 weakSelf = nil이됩니다.

분류에서Dev

UIView.Animate를 사용한 간단한 애니메이션

분류에서Dev

MongoDB : Mapreduce가 필요합니까? 예약 애플리케이션의 날짜에 대한 범위 쿼리

분류에서Dev

ASP.NET ID에 대한 참조가 필요합니다.

분류에서Dev

'Ruby on Rails 4'에 대한 참조 / 교재가 필요합니다.

분류에서Dev

내 UIView 애니메이션에도 대화 형 전환이 가능합니까?

분류에서Dev

phpDocumentor-다른 요소에 대한 주석 참조에 완전한 경로가 필요합니까?

분류에서Dev

UIView setFrame을 애니메이션하여 각 애니메이션 가능한 프레임에서 drawRect를 강제 실행합니다.

분류에서Dev

UIView.animate ()가 뷰에 애니메이션을 적용하지 못하는 이유는 무엇입니까?

분류에서Dev

SVG 애니메이션에 대한 작은 도움이 필요합니다

분류에서Dev

jquery animate에 대한 도움이 필요합니다.

분류에서Dev

약한 엔티티에 부분 키가 필요합니까?

분류에서Dev

MVVM 논리 계층에는 Entity Framework에 대한 참조가 필요합니다.

분류에서Dev

녹아웃 foreach beforeRemove animate anomaly : 인접한 동일한 div에 가끔 애니메이션 적용

분류에서Dev

동일한 개체에 대한 2 개의 약한 참조가 서로 다른 정보를 표시합니다.

분류에서Dev

비공유 멤버에 대한 VB.net 참조에는 개체 참조가 필요합니다.

분류에서Dev

GetAbbreviatedMonthName의 비 정적 필드, 메서드 또는 속성에 대한 개체 참조가 필요합니다.

분류에서Dev

비 정적 필드, 메서드 또는 속성 dataGridView1에 대한 개체 참조가 필요합니다.

분류에서Dev

Winforms-비 정적 필드, 메서드 또는 속성에 대한 개체 참조가 필요합니다.

분류에서Dev

SVG 가시성 애니메이션에 대한 keyTimes 설정

분류에서Dev

jquery 추가 텍스트에 대한 애니메이션

분류에서Dev

스레드에 대한 참조를 전달할 때 std :: ref가 정말 필요합니까?

분류에서Dev

블록 내부의 약한 참조에 대한 강한 참조

분류에서Dev

참조 유형에 대한 설명이 필요합니다.

분류에서Dev

이 상황에 가장 적합한 애니메이션 옵션

분류에서Dev

부모가 동일한 다른 UIView에서 UIView를 어떻게 제어 / 참조 할 수 있습니까?

Related 관련 기사

  1. 1

    UIPageController의 공유보기에 대한 UIView 애니메이션

  2. 2

    하위 뷰에 대한 참조가 약해야합니까?

  3. 3

    ARC에서 dealloc 메서드는 self에 대한 약한 참조를 포함하는 메서드 / 블록을 호출하여 weakSelf = nil이됩니다.

  4. 4

    ARC에서 dealloc 메서드는 self에 대한 약한 참조를 포함하는 메서드 / 블록을 호출하여 weakSelf = nil이됩니다.

  5. 5

    UIView.Animate를 사용한 간단한 애니메이션

  6. 6

    MongoDB : Mapreduce가 필요합니까? 예약 애플리케이션의 날짜에 대한 범위 쿼리

  7. 7

    ASP.NET ID에 대한 참조가 필요합니다.

  8. 8

    'Ruby on Rails 4'에 대한 참조 / 교재가 필요합니다.

  9. 9

    내 UIView 애니메이션에도 대화 형 전환이 가능합니까?

  10. 10

    phpDocumentor-다른 요소에 대한 주석 참조에 완전한 경로가 필요합니까?

  11. 11

    UIView setFrame을 애니메이션하여 각 애니메이션 가능한 프레임에서 drawRect를 강제 실행합니다.

  12. 12

    UIView.animate ()가 뷰에 애니메이션을 적용하지 못하는 이유는 무엇입니까?

  13. 13

    SVG 애니메이션에 대한 작은 도움이 필요합니다

  14. 14

    jquery animate에 대한 도움이 필요합니다.

  15. 15

    약한 엔티티에 부분 키가 필요합니까?

  16. 16

    MVVM 논리 계층에는 Entity Framework에 대한 참조가 필요합니다.

  17. 17

    녹아웃 foreach beforeRemove animate anomaly : 인접한 동일한 div에 가끔 애니메이션 적용

  18. 18

    동일한 개체에 대한 2 개의 약한 참조가 서로 다른 정보를 표시합니다.

  19. 19

    비공유 멤버에 대한 VB.net 참조에는 개체 참조가 필요합니다.

  20. 20

    GetAbbreviatedMonthName의 비 정적 필드, 메서드 또는 속성에 대한 개체 참조가 필요합니다.

  21. 21

    비 정적 필드, 메서드 또는 속성 dataGridView1에 대한 개체 참조가 필요합니다.

  22. 22

    Winforms-비 정적 필드, 메서드 또는 속성에 대한 개체 참조가 필요합니다.

  23. 23

    SVG 가시성 애니메이션에 대한 keyTimes 설정

  24. 24

    jquery 추가 텍스트에 대한 애니메이션

  25. 25

    스레드에 대한 참조를 전달할 때 std :: ref가 정말 필요합니까?

  26. 26

    블록 내부의 약한 참조에 대한 강한 참조

  27. 27

    참조 유형에 대한 설명이 필요합니다.

  28. 28

    이 상황에 가장 적합한 애니메이션 옵션

  29. 29

    부모가 동일한 다른 UIView에서 UIView를 어떻게 제어 / 참조 할 수 있습니까?

뜨겁다태그

보관