Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- UITextView
- Human interface guide
- SWIFT
- HIG
- 리펙토링
- 애니메이션
- 리팩토링
- Clean Code
- tableView
- Refactoring
- ribs
- UICollectionView
- swift documentation
- Protocol
- combine
- Xcode
- ios
- Observable
- 리펙터링
- MVVM
- 스위프트
- uiscrollview
- map
- swiftUI
- clean architecture
- uitableview
- collectionview
- rxswift
- 클린 코드
- RxCocoa
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - Swift] Optimization Level 개념과 assert, assertFailure, precondition, preconditionFailure, fatalError 사용 방법 본문
iOS 응용 (swift)
[iOS - Swift] Optimization Level 개념과 assert, assertFailure, precondition, preconditionFailure, fatalError 사용 방법
jake-kim 2022. 12. 13. 23:21Optimization Level 종류
*Optimization Level이란? 컴파일러 옵션의 종류를 의미
- Onone: debug 모드 (최소한의 최적화와 디버그 정보 기록 o)
- O: release 모드 (최적화 수행과 디버그 정보 기록 x)
- Osize: 성능보다 코드 사이즈를 줄이는 것에 최적화
Optimization Level 설정 방법
- Xcode > Build Settings > Swift Compiler - Optimization Level에서 설정
- Debug의 디폴트값은 -Onone (최적화는 되지 않지만 디버그 정보 기록 o)
- Release의 디폴트값은 -O (최적화하고 디버그 정보 기록 x)
cf) Apple Clang - Code Generation 부분은 Objective-C 옵션
assert, assertFailure, precondition, preconditionFailure, fatalError 의미
- assert: 내부 조건이 false가 되면 runtime error를 발생하여, 주의해야한다는 의미로 사용
assert(val % 2 == 0, "this is assert message")
- assertionFailure: 별도의 조건은 없고 바로 runtime error 발생
assertionFailure("this is assertionFailure message")
- precondition: assert는 true여야 runtime error가 나지만, precondition은 false여야 runtime error 발생
precondition(val % 2 == 1, "this is precondition message")
- preconditionFailure: 별도의 조건은 없고 바로 runtime error 발생
preconditionFailure("this is preconditionFailure message")
- fatalError: 별도의 조건이 없고, 무조건 runtime error 발생
fatalError("this is fatalError message")
적용되는 범위
(-Oneon은 debug모드의 디폴트 값, -O은 Release 모드의 디폴트 값)
- assert, assertFailure: -Onone일때만 활성화
- precondition, preconditoinFailure: 항상 활성화
- fatalError - 항상 활성화
결론
- debug 모드 (Onone) 에서만 runtime error가 나가끔 하려면 assert, assertFailure 사용
- release 모드 (O) 에서도 runtime error가 나게끔 하려면 precondition, preconditionFailure 사용
- assert, precondition 조건 없이 에러가 나는 의미를 전달하고 싶을땐 fatalError 사용
* 참고
https://developer.apple.com/documentation/swift/1539616-assertionfailure
https://developer.apple.com/documentation/swift/1541112-assert
https://github.com/apple/swift/blob/main/docs/OptimizationTips.rst#enabling-optimizations
https://eunjin3786.tistory.com/453
https://developer.apple.com/forums/thread/111158
'iOS 응용 (swift)' 카테고리의 다른 글
Comments