반응형
iOS 개발자를 위한 토막 상식, 일곱 번째
1. ViewController의 생명주기(Lifecycle)는 UIView와 다르게 동작한다.
- ViewController는 메모리에 로드될 때 viewDidLoad, 사용자에게 보여지기 직전에 viewWillAppear, 보여진 후 viewDidAppear 등이 호출된다. 반면, UIView는 init, layoutSubviews, draw(_:) 등에서 주로 커스터마이징 된다.
- 이 차이를 이해하면 UI 구성 타이밍과 네트워크 호출 시점을 정확히 잡을 수 있다.
override func viewDidLoad() {
super.viewDidLoad()
print("뷰가 메모리에 올라옴")
}
2. ARC는 강한 순환 참조를 해결하지 못하므로 weak 또는 unowned 키워드 사용이 필수이다.
- 대표적으로 delegate 패턴에서는 메모리 누수를 막기 위해 weak으로 선언해야 한다.
- 클로저 내부에서 self를 참조할 때도 캡처 리스트를 이용해 [weak self]를 써야 한다.
class MyViewController: UIViewController {
weak var delegate: SomeDelegate?
}
3. 앱이 백그라운드 상태일 때 동작하는 코드에는 제한이 있으며, Background Modes 설정이 필요하다.
- 예를 들어 위치 추적, 오디오 재생, 백그라운드 fetch 등을 수행하려면 Xcode 프로젝트 설정에서 명시적으로 백그라운드 모드를 활성화해야 한다.
<key>UIBackgroundModes</key>
<array>
<string>location</string>
<string>fetch</string>
</array>
4. AppDelegate와 SceneDelegate의 역할은 iOS 13부터 분리되었다.
- AppDelegate는 앱 전체 라이프사이클(예: 푸시, 백그라운드 전환 등)을 관리하고,
- SceneDelegate는 UI 씬의 상태 관리(예: 창이 열리고 닫히는 것)를 담당한다.
func sceneDidBecomeActive(_ scene: UIScene) {
print("Scene이 활성화됨")
}
5. iOS에서 네트워크 요청은 반드시 ATS(App Transport Security)를 고려해야 한다.
- HTTP가 아닌 HTTPS 통신을 권장하며, 예외적으로 HTTP를 사용하려면 Info.plist에 예외 설정을 추가해야 한다.
- 보안 규정을 지키지 않으면 앱스토어 심사에서 리젝될 수 있다.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
반응형
'개발 토막 상식' 카테고리의 다른 글
iOS 개발자를 위한 토막 상식 6 (0) | 2025.05.18 |
---|---|
iOS 개발자를 위한 토막 상식 5 (0) | 2025.04.22 |
iOS 개발자를 위한 토막 상식 4 (0) | 2025.04.22 |
iOS 개발자를 위한 토막 상식 3 (0) | 2025.04.16 |
iOS 개발자를 위한 토막상식 2 (0) | 2025.04.15 |