반응형
Method Swizzling?
개념
Method Swizzling은 원래의 메서드를 runtime에 원하는 메서드로 변경해 사용할 수 있도록 하는 기법입니다.
UIViewController의 viewWillAppear같은 메서드를 원하는 메서드로 변경해 여러 ViewController에 한번에 작업을 적용하는 방식으로도 사용이 가능합니다.
예를 들어 앱 분석기능을 적용하는 경우 여러 ViewController에 같은 동작을 수행해야하는 경우가 있습니다. 이럴 때 하나씩 적용하는 것보단, Method Swizzling으로 한번에 처리하는 것이 효율적인 것이지요.
사용예시
import UIKit
extension UIViewController {
static func methodSwizzling() {
let originalSelector = #selector(viewWillAppear)
let swizzledSelector = #selector(swizzledViewWillAppear)
if let origin = class_getInstanceMethod(UIViewController.self, originalSelector),
let swizzle = class_getInstanceMethod(UIViewController.self, swizzledSelector) {
method_exchangeImplementations(origin, swizzle)
}
}
@objc
func swizzledViewWillAppear() {
print("swizzledViewWillAppear")
}
}
Method Swizzing은 위와 같은 코드로 적용이 가능합니다. 그리고 앱의 시작과정 혹은 필요한 곳에서
UIViewController.methodSwizzling()
이를 호출하는 것으로 작업을 처리할 수 있습니다.
현재 제가 수행중인 프로젝트에 적용해보니 결과가 잘나오네요!
반응형
'🍎 Apple > Swift' 카테고리의 다른 글
[Swift] 순열과 조합 구현 (2) | 2022.04.25 |
---|---|
[Swift] Queue (Deque) 구현 (0) | 2022.04.25 |
[Swift] Localizing (NSLocalizedString) (5) | 2022.04.10 |
[Swift] Generic (0) | 2022.03.07 |
[Swift] NotificationCenter (0) | 2022.03.07 |