TIL 2020.06.09

Doehyung Kim·2020년 6월 10일
0

오늘 한 일

1. numberOfSections가 왜 3번 호출되는지 알아냈다.

  • 첫번째 호출은 UITableViewController 에서 viewWillAppear가 호출되고, numberOfSectionsUsingPresentationValues가 호출되고 나서 updateRowData가 호출되기 때문에 호출된다.
  • 두번째 호출도 역시 UITableViewController에서 viewWillAppear 호출 이후 reloadData가 호출되기 때문에 호출된다.
  • 세번째 호출은 VC의 view가 layoutSublayersOfLayer 호출이후 view의 하위 뷰인 TableView가 자체적으로 layoutSubviews를 호출하기 때문에 호출된다.

2. 탈출 클로저에 대해 질문하였다.

Q: @JK 질문이 있습니다. 
특정 메소드의 탈출 클로저가 self 를 캡처하는 경우, 무조건 캡처리스트로 weak하게 캡처해야 할까요?
특정 메소드의 객체가 해당 탈출 클로저를 프로퍼티로 저장하지 않는걸 안다면 weak 하게 캡처안해도 되는 건지 궁금합니다.

A: 순환 참조가 일어나지 않고 참조가 투명한(?) 클로저라면 weak로 캡처하지 않아도 무난합니다. 
다만 메소드를 호출하거나 해도 그 내부에서 또 다른걸 참조할 수도 있으니까 습관적으로 weak self를 처리하는 것도 나쁘지 않습니다.
명확하게 관리할꺼냐 습관으로 관리할 꺼냐 정도로 생각해보세요.

Q: 메소드 내부에서 다른 것이 그 클로저를 참조할수도 있다는 것을 말씀하시는거죠??

A: 이제 봤네요. 그 클로저를 참조할수도 있지만 클로저가 아니라 소유한 객체를 참조할 수도 있다는거죠.
VC <- 클로저 <- 메소드 <- VC 이런 순환 고리가 생길 수 있다는 의미입니다.

=> 후.. 여러가지 실험을 다시 해보자.

3. 자판기 앱을 다시 고쳤다.

  • 오토레이아웃을 다시 적용하였다.

  • BalanceButton에 대하여 Tag를 이용하는 방식을 삭제하고, switch 문 대신 상속(Balance5000Button, Balance1000Button) 을 적용하였다.
profile
해피 코딩

0개의 댓글