[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple/Question 5

[iOS] Remote data를 가져올 때 Data(contentsOf:)를 사용하면 안되는 이유

Remote data를 가져올 때 Data(contentsOf:)를 사용하면 안되는 이유 일단 이 메서드는 동기적으로 작동한다는 것이 기본입니다. 따라서 현재작업중인 스레드의 모든 작업을 해당 작업을 수행하는 동안 멈추게할 위험이 있습니다. 이는 사용성에 매우 악영향을 주겠죠? 그럼 DispatchQueue.global().async로 감싸주면 어떨까요? 이러면 스레드 문제도 해결되었으니 Data(contentsOf:)를 사용해도 괜찮은 것일까요? 아예 안된다고 못박을 수는 없겠지만, 권장하지는 않습니다. 먼저 main 스레드를 멈추는 문제는 해결했지만 여전히 GCD의 제한된 작업스레드 중 하나를 묶는 셈이 됩니다. 이는 직접적이진 않아도 간접적으로 성능에 영향을 줍니다. 또한 URLSession과 달리..

🍎 Apple/Question 2022.05.17

[UIKit] dequeueReusableCell (withIdentifier:for:) vs (withIdentifier:)

tableView에서 Cell을 재사용하기 위해 사용되는 메서드인 dequeueReusableCell에는 두가지 형태가 있습니다. dequeueReusableCell(withIdentifier:for:)과 dequeueReusableCell(withIdentifier:)가 그것인데요. 이 두 메서드의 정확한 차이는 무엇일까요? 하나는 indexPath를 함께 파라미터로 받고 있고, 하나는 받지 않고 있습니다. 두 메서드의 기능이 똑같다면 굳이 indexPath 넣어주는 메서드를 사용할 필요가 있을까요? 무언가 특별한 기능이 있으니까 사용하는 것 아닐까요? 일단 애플 공식문서 찾아보기 일단 문서의 글을 읽어봅시다. func dequeueReusableCell(withIdentifier:for:) : reu..

🍎 Apple/Question 2022.04.18

[iOS] #selector는 무엇이며 왜 필요할까?

우리는 iOS 개발에서 특정 Control에 target-action을 적용할 때 자연스럽게 Selector라는 타입의 객체(#selector(@objc method))를 사용합니다. 그런데 이것이 정확히 무엇일까요...? 오늘은 이 Selector가 무엇인지, 왜 필요한지 알아보고 정리했습니다! Objective-C에서의 Selector 사실 Selector는 원래 Objective-C에서 사용하던 기능입니다. 이는 특정 메서드를 컴파일타임에 동적으로 식별하고 참조하는 역할을 했습니다. 이러한 특징을 기반으로 Objective-C에서 동적으로 메서드를 동작시키려할 때 Selector를 사용했습니다. 반면 Swift에서는 이런 별도의 객체를 사용하지 않아도 메서드를 동적으로 동작시킬 수 있기 때문에 직접..

🍎 Apple/Question 2022.02.07

[iOS] 왜 오토 레이아웃을 사용할 때는 translatesAutoresizingMaskIntoConstraints = false를 할까?

왜 오토 레이아웃을 사용할 때는 translatesAutoresizingMaskIntoConstraints = false를 할까? 부모뷰가 커지거나 줄어듦에 따라 서브 뷰의 크기나 위치를 조정하는 방식을 결정하는 Autoresizing이라는 개념이 존재한다. 이 개념은 여러 속성을 부여하여 슈퍼뷰의 크기 변화에 따라 서브 뷰의 width, height 혹은 leading, top, trailing, bottom 영역을 유연하게 고정하거나 확장할 수 있다. 이러한 Autosizing은 AutoresizingMask를 통해 적용할 수 있는데, 슈퍼 뷰의 bounds가 변경 될 때 자신의 크기를 조정하는 방법을 결정하는 비트마스크이다. 다만 Autoresizing과 AutoLayout을 동시에 사용하고자 할 ..

🍎 Apple/Question 2022.01.21

[iOS] 왜 UI는 메인 스레드에서 다룰까?

왜 UI는 메인 스레드에서 다룰까? 1. UIKit의 대부분 구성요소는 non-atomic하게 구성되어있는데, 이는 곧 Thread-safe하지 않다는 것을 의미한다. 모든 속성을 Thread-safe하게 설계하기엔 UIKit이 너무 방대한 프레임워크이다. 이를 억지로 보장하도록하는 것은 오히려 성능상으로 좋지 않다는 애플의 발표도 있다. 예를 들어 생각해보자. UITableView의 셀이 백그라운드 스레드에서 제거되었는데 다른 백그라운드 스레드가 해당 셀에 접근하려고하면 어떻게될까? 크래시가 발생할 것이다. 또 백그라운드 스레드의 Runloop에 특정 뷰에 대한 제거가 진행중에 있는데, 사용자가 해당 뷰를 탭하면 그 응답을 어떻게 처리해야할까? 어떤 스레드에서 해당 응답을 처리해야할지조차 애매하다. 2..

🍎 Apple/Question 2022.01.14