Skip to main content

Writing High-Performance Swift Code

  • Enabling Optimizations
  • Whole Module Optimizations (WMO)
  • Reducing Dynamic Dispatch
  • Dynamic Dispatch
    • Advice: Use 'final' when you know the declaration does not need to be overridden
    • Advice: Use 'private' and 'fileprivate' when declaration does not need to be accessed outside of file
    • Advice: If WMO is enabled, use 'internal' when a declaration does not need to be accessed outside of module
  • Using Container Types Efficiently
    • Advice: Use value types in Array
    • Advice: Use ContiguousArray with reference types when NSArray bridging is unnecessary
    • Advice: Use inplace mutation instead of object-reassignment
  • Wrapping operations
    • Advice: Use wrapping integer arithmetic when you can prove that overflow cannot occur
  • Generics
    • Advice: Put generic declarations in the same module where they are used
  • The cost of large Swift values
    • Advice: Use copy-on-write semantics for large values
  • Unsafe code
    • Advice: Use unmanaged references to avoid reference counting overhead
  • Protocols
    • Advice: Mark protocols that are only satisfied by classes as class-protocols
  • The Cost of Let/Var when Captured by Escaping Closures
    • Advice: Pass var as an inout if closure not actually escaping
  • Unsupported Optimization Attributes

Comments