티스토리 뷰

iOS

iOS ) asyncAfter. deadline / wallDeadline

Zedd0202 2019. 5. 15. 23:15
반응형


안녕하세요 :) Zedd입니다.

어제 잠깐 GCD를 보는데..


??



wallDeadline?



이건 첨 들어보네


deadline은 늘 쓰던거니까 ㅇㅋ 

wallDeadline은 뭔지 함 보자


아 정의가 같네

하지만 파라미터 정의는 다를거야..!!



항상 이런식이지 너는


그럼 실험을 해봅시다.


결과는...


똑같은디 걍?


아~~나 진짜...

아 아니네


자~~여러분 :)


타입이 다르네~~~~


그럼 DispatchTime과 WallTime을 봅시다.




일단 정의가 다르다는 부분에 안심이 되는군요.


둘다 struct고,


DispatchTime: nanosecond 정밀도의 default(system) clock에 상대적인 시점

DispatchWallTime: microsecond 정밀도를 가진 벽시계........(wall time)에 따른 절대 시점(absolute point in time)


WallTime,,,,??? 벽시계가 왜..



https://en.wikipedia.org/wiki/Elapsed_real_time


이게 컴퓨터 용어도 되는 그런거였군요..




DispatchTime부터 봐볼게요.


부팅 후 작동하는 시스템 clock에 상대적인 DispatchTime을 생성합니다.

여전히 이해가 안가지만 이거 하나만 알면됩니다.

"시스템 clock에 상대적인"


위ㅏ에서 정의도 nanosecond 정밀도의 default(system) clock에 상대적인 시점

다시 말하면 시스템 clock에 의존하지 않는다는겁니다.



그럼 DispatchWallTime은 시스템 clock에 의존하냐?

네! 맞습니다.

DispatchTime과 거의 동일하지만, 시스템 clock에 의존합니다. 



아직까지 모르겠죠

시스템시간에 의존하고 안하고가 뭔 차이를 만드는지!


실험을 하나 할건데, 이거 보시면 이해가 아주 잘 가실거에요.




자 타이머를 하나 만들었습니당

interval은 1초에요.


그리고


이 updateTime메소드가 1초마다 불릴거에요.

count가 10보다 크면 timer을 invalidate해줍시다. 안해주면 안끝남 ㅎ


10이라는 숫자는 이따가 바꿀껀데요. 이런식이라는것만 봐주세요.

그리고



deadline과 wallDeadline을 이렇게 해줬습니다. .now()로 부터 10초 뒤에 저 블록이 execute될거에요.



뭐 이런식.


그리고 저 숫자를 60으로 고쳐볼게요.

그럼 둘다 60초 후에 deadline, wallDeadline의 실행블록이 실행되겠죠..


그럼 시작해봅시다.

이건 움짤로 보여드릴테니 잘 보세연~~근데 이걸 시뮬에서 할 수가 없어서 콘솔이랑 같이 보여줄 수가 없겠네요. 아 아니다


자..제가 좀 편집을 했는데.


그러니까 flow를 말로 한번 다시 설명하면,


이렇게 n초뒤에 저 print가 찍히도록 해놓은 상황이고, 그 n초 사이에

시스템 clock을 바꿔놓은 거에요.


제가 바꾸니까 

마지막에 


이렇게 wallDeadline이 끝난것을 볼 수 있습니다.

반면에 dealine은 출력이 안됐죠.



자 위에서 했던 이야기를 다시한번 해볼게요.



DispatchTime: 위ㅏ에서 정의도 nanosecond 정밀도의 default(system) clock에 상대적인 시점

다시 말하면 시스템 clock에 의존하지 않는다는겁니다.



그럼 DispatchWallTime은 시스템 clock에 의존하냐?

네! 맞습니다.

DispatchTime과 거의 동일하지만, 시스템 clock에 의존합니다. 


asyncAfter를 돌려놓고, 시스템 시간을 바꾸고 다시 와보니까 DispatchWallTime만 출력이 되었죠?

그러니까 DispatchWallTime은 시스템 clock에 의존한다는 거에요. 

시스템 clock을 기준으로 그 절대시점을 보는겁니다.

하지만 DispatchTime은 시스템 시간과는 상관이 없습니다.




음..지금와서 생각하니까 내가 timer왜 해놨지..timer는 background가면 동작을 안하는데zzz 

결과적으로 더 헷갈려진 것 같지만..그래도 시간이 흘렀다~ 라는 것만 봐주시면 될 것 같아요. 

암튼 DispatchTime은 정말 내가 딱 .now() + 10해놨으면 시스템 시간과는 상관없이 10초 이후에는 그냥 실행합니다.



암튼 이런 차이가 있었네요.


여러분 제가 지금 개발의 의무를 다하기 위해 블로그를 잠시 내려놓을려고 합니다. 하하




참고: https://stackoverflow.com/questions/51863940/what-does-dispatchwalltime-do-on-ios

반응형

'iOS' 카테고리의 다른 글

iOS ) SwipeActionsConfiguration  (0) 2019.05.26
iOS ) Facebook공유기능  (1) 2019.05.20
iOS ) Core Animation  (0) 2019.05.14
iOS ) Fabric적용해보기  (2) 2019.05.12
iOS ) NSLocalizedString with variables  (0) 2019.05.11