inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

iOS12 앱 개발 퍼펙트 가이드

질문입니다.

254

습득자

작성한 질문수 13

1

안녕하세요. 레이아웃편과 퍼팩트가이드 두편 모두 보며 많이 배우고 있습니다.

질문이있는데요 UI 변경 관련 코드는  DispatchQueue.main.dasync { } 코드 안에 작성하라고 하셨는데

대체 UI 변경이란게 어떤걸 의미하는지 자세히 모르겠습니다. 간단한 뷰의 위치이동이나 색 변경 등등은 저 코드 안에 작성 안해도 오류가 나지않는 반면    self.scrollView.setContentOffset(CGPoint(x: self.onulhalin.frame.minX - 60 ,y: 0), animated: true 이런 코드는 저 코드 안에 넣지 않으면 오류가 나더라구요. 대체 UI 관련 코드라는게 정확히 어떤 행위를 의미하는건가요?er

adasdd {

ios swift

답변 3

1

iOS Developer - 이정

안녕하세요.

우선 thread에는 main thread와 background(혹은 다른)thread의 구분이 있습니다. 

우리가 만드는 코드는 기본적으로  메인스레드에서 동작되도록 되어 있습니다.

따라서 일반적인 로직에서는 main async안에 넣지 않아도 UI업데이트는 바로 됩니다.

 

그런데 메인스레드가 아닌 상황은 클로저 안에 있을경우, 다른 스레드를 만들었을 경우입니다.

이 안에서 UI변경을 하면 운좋으면 매우 느리게(몇십초) 반응하거나 크래쉬가 납니다.

main thread가 아닌 경우 UI변경을 하면 안되거나 크래쉬가 나는 이유는 아래와 같습니다.

 

UIApplication이라는게 있는데 이건 앱의 Main RunLoop를 관리하고 UI 이벤트 같은걸 관리하도록 만들어진 녀석입니다.

쉽게말해 앱이 동작되기 위해 event와 UIKit을 관리하는게 이것이라고 생각하면 될듯합니다.

근데 이 UIApplication라는게 main thread에서"만" 생성되고 동작하도록 설계되어 있습니다.

이건 빠른 퍼포먼스, 낮은 자원사용, 충돌등의 많은 문제등을 해결하기 위한 애플의 의도된 설계입니다.

 

때문에 UI 이벤트(변경)은 main thread에서 해야 UIApplication이 제대로 UI변경을 처리할 수 있다고 보면 될 것 같습니다.

0

iOS Developer - 이정

안녕하세요

클로저 안이라는 표현은 클로저 구현 부분 라고 이해하시면 될 것 같습니다.

클로저에서 in 다음 부분을 말하는거죠.

xxx { _ in 

// 여기가 클로저 구현 부분

}

우리가 흔히 사용하는 화면을 present하는 completion 부분을 생각하시면 될 것 같습니다.

   self.present(xxxVC, animated: false) {

             // 여기가 클로저 구현 부분

     }

 
그리고 다른 thread를 만든다는건 보통 아래와 같이 만듭니다.
아래 global안에 감싸있는 코드는 main thread가 아닌 다른 thread로 만들어진 것입니다.
보통 이런걸 하는 이유는 '동시'에 하고 싶은 로직이 있을때 합니다.

    DispatchQueue.global().async {

          // 여기는 main thread가 아님.  

    }

0

습득자

답변 정말 감사합니다. 근데 약간 이해가가지않는 부분이 생겨 다시질문드립니다. 

그런데 메인스레드가 아닌 상황은 클로저 안에 있을경우, 다른 스레드를 만들었을 경우입니다.  << 이렇게 답변 주셨는데  여기에서 클로저 안에 있는 경우는 이해가갔는데 다른스레드를 만들었을 경우가 언제인지 궁금합니다.  다른스레드가 제가 만든것인지  아니면 자동으로 만들어진건가요? 혹시 클로저 안에 있는 경우와, 다른 스레드를 만들었을 경우 예제 코드가 있을까요?

강의 정리 및 개인 공부

0

278

1

DispatchQueue 질문입니다.

0

575

1

log in 강의 질문드립니다.

0

304

1

meal cell 클릭시 화면 이동 문제

0

379

1

meal cell 클릭시 화면이동 불가

0

347

2

import CreateMLUI 이 안됩니다.

0

241

1

Stop Watch 질문

0

350

2

SignIn ViewController와 SignUp ViewController가 꽉 차지 않는 이유가 궁금합니다.

0

261

1

createMLUI가 import되지 않습니다

0

460

1

plist에 nsallowsarbitraryloads 추가시에도 http통신이 안됩니다

0

903

1

질문드립니다~

0

355

1

질문드립니다.

0

278

2

view와 Viewcontroller의 관계에 대해서 질문 드립니다.

0

222

1

stopwatch 강의 중 시간단위 변경에 대해 질문드립니다.

0

376

2

VNCoreMLRequest 실행 안됨

0

376

2

autolayout attr

0

207

0

Sign in 할때 발생하는 에러가 왜 나타나는지 모르겠습니다.

0

344

1

강의 관련 소스 코드 공유 부탁 드립니다.

0

363

2

별표시부분에 색깔이 칠해는거 없애려면 어떻게 하면 될까요?

0

252

1

반드시 required init을 생성해야하는 이유가 뭔가요??

0

952

1

3:20~ 3: 30 초에 rating 값을 0 으로 만들어 준다고했는데 왜 0으로 만들어주는 코드가 없죠?

0

254

1

강사님 안녕하세요

0

158

1

MealDetailViewController에서 이미지 가져오지 못하는 문제

0

213

1

?? 설명하실 때요.

0

238

1