728x90
반응형
순환참조는 메모리누수를 발생시킬 수 있다. 따라서 weak reference를 통해 순환참조를 피할 수 있다.
예시
Swift
func retainCycleHandler() {
someObject.someBlock { [weak self] in
guard let self = self else { return }
self.navigationController?.popViewController(animated: true)
}
}
objc
- (void)retainCycleHander {
__weak __typeof(self)weakSelf = self;
[someObject someBlock:^ {
__strong __typeof(weakSelf)self = weakSelf;
if (!self) { return; }
[self.navigationController popViewControllerAnimated:YES];
}];
}
https://github.com/jspahrsummers/libextobjc 같은 라이브러리에는 @weakfy, @strongify로 더 간단하게 디파인 되어있다.
- (void)retainCycleHander {
@weakfy(self);
[someObject someBlock:^ {
@strongify(self);
if (!self) { return; }
[self.navigationController popViewControllerAnimated:YES];
}];
}
반응형
'프로그래밍 > Swift' 카테고리의 다른 글
Closure Memory leak with Retain Cycle Examples (0) | 2023.09.28 |
---|---|
swift-format 에러발생 (0) | 2022.09.21 |
objc에서 swift 파일 임포트 (0) | 2022.07.28 |
pod install 에러 (rescue in block in activate_dependencies': Could not find 'minitest' (>= 5.1) among 39 total gem(s)) (0) | 2022.07.09 |
iOS 개발자 되는 방법 (0) | 2022.01.18 |