관리 메뉴

김종권의 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:21

Optimization Level 종류

*Optimization Level이란? 컴파일러 옵션의 종류를 의미

  • Onone: debug 모드 (최소한의 최적화와 디버그 정보 기록 o)
  • O: release 모드 (최적화 수행과 디버그 정보 기록 x)
  • Osize: 성능보다 코드 사이즈를 줄이는 것에 최적화

Xcode 설정에서 3가지 타입

Optimization Level 설정 방법

  • Xcode > Build Settings > Swift Compiler - Optimization Level에서 설정

  • Debug의 디폴트값은 -Onone (최적화는 되지 않지만 디버그 정보 기록 o)
  • Release의 디폴트값은 -O (최적화하고 디버그 정보 기록 x)

cf) Apple Clang - Code Generation 부분은 Objective-C 옵션

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

 

Comments