В Objective-C мы можем запустить CADisplayLink с шаблоном прокси, чтобы разрушить сильную ссылку:
WeakProxy *weakProxy = [WeakProxy weakProxyForObject:self];
self.displayLink = [CADisplayLink displayLinkWithTarget:weakProxy selector:@selector(displayDidRefresh:)];
Затем просто аннулируйте displayLink в dealloc
:
- (void)dealloc
{
[_displayLink invalidate];
}
Однако NSProxy, похоже, не может быть унаследован в Swift: https://bugs.swift.org/browse/SR-1715
Я пробовал писать вот так:
weak var weakSelf = self
displayLink = CADisplayLink(target: weakSelf!, selector: #selector(displayDidRefresh(dpLink:)))
Это не сработало.
Я хотел бы знать, есть ли способ добиться этого, как в Objective-C.