본문 바로가기

프로그래밍/iOS

setNeedsLayout VS layoutIfNeeded / setNeedsDisplay VS layoutIfDisplay

  1. setNeedsLayout
    - 호출 시  needsLayout flag가 YES로 변경.
    - 호출 즉시 뷰가 적용는 것이 아니라 다음 run loop에 뷰 변경이 적용
    - 여러 부분에서 호출하더라도, 다음 run loop에서 한번만 적용
    - layoutSubview가 호출 


  2. layoutIfNeeded
    - 호출 시 needsLayout flag를 체크하여 YES인 경우 뷰 변경을 즉시 적용.
    - 호출 즉시 뷰 변경을 적용하기 때문에 여러 부분에서 사용할 경우 성능상의 문제가 생길 수 있음
    - layoutSubview가 호출 됨


  3. setNeedsDisplay
    - 호출 시 needsDisplay flag가  YES로 변경.
    - 호출 즉시 뷰가 적용되는 것이 아니라 다음 run loop에 뷰 변경이 적용
    - 여러 부분에서 호출하더라도, 다음 run loop에서 한번만 적용
    - drawRect가 호출 


  4. displayIfNeeded
    NSView, CALayer에 포함된 메소드
    - 호출 시 needsDisplay flag를 체크하여 YES인 경우 뷰 변경을 즉시 적용.
    - 호출 즉시 뷰 변경을 적용하기 때문에 여러 부분에서 사용할 경우 성능상의 문제가 생길 수 있음
    - drawRect가 호출 


  5. 4가지 메소드의 차이를 확인하기 위한 실습 결과(for문을 통해 textView의 text를 바꿔봄)
    - setNeedsDisplay: for문 완료 후 drawRect 메소드 한번 호출. 뷰는 for문 완료 후 적용.
    - displayIfNeeded: drawRect 메소드 호출 및 뷰 적용 X
    - setNeedsDisplay & displayIfNeeded: drawRect 매번 호출. 뷰는 for문 완료 후 적용. - 뷰 변경은 for문 완료 후 한만 변경.


'프로그래밍 > iOS' 카테고리의 다른 글

KVC(Key-Value Coding) & KVO(Key-Value Observing)  (0) 2017.04.18
비동기 처리방법 및 장/단점(GCD 제외)  (0) 2017.04.17
Run Loop  (0) 2017.04.12
NSHashTable  (0) 2017.04.11
NSAutoreleasePool VS @autorelease block  (0) 2017.04.10