New file |
| | |
| | | // |
| | | // YYTextWeakProxy.h |
| | | // YYText <https://github.com/ibireme/YYText> |
| | | // |
| | | // Created by ibireme on 14/10/18. |
| | | // Copyright (c) 2015 ibireme. |
| | | // |
| | | // This source code is licensed under the MIT-style license found in the |
| | | // LICENSE file in the root directory of this source tree. |
| | | // |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | /** |
| | | A proxy used to hold a weak object. |
| | | It can be used to avoid retain cycles, such as the target in NSTimer or CADisplayLink. |
| | | |
| | | sample code: |
| | | |
| | | @implementation MyView { |
| | | NSTimer *_timer; |
| | | } |
| | | |
| | | - (void)initTimer { |
| | | YYTextWeakProxy *proxy = [YYTextWeakProxy proxyWithTarget:self]; |
| | | _timer = [NSTimer timerWithTimeInterval:0.1 target:proxy selector:@selector(tick:) userInfo:nil repeats:YES]; |
| | | } |
| | | |
| | | - (void)tick:(NSTimer *)timer {...} |
| | | @end |
| | | */ |
| | | @interface YYTextWeakProxy : NSProxy |
| | | |
| | | /** |
| | | The proxy target. |
| | | */ |
| | | @property (nullable, nonatomic, weak, readonly) id target; |
| | | |
| | | /** |
| | | Creates a new weak proxy for target. |
| | | |
| | | @param target Target object. |
| | | |
| | | @return A new proxy object. |
| | | */ |
| | | - (instancetype)initWithTarget:(id)target; |
| | | |
| | | /** |
| | | Creates a new weak proxy for target. |
| | | |
| | | @param target Target object. |
| | | |
| | | @return A new proxy object. |
| | | */ |
| | | + (instancetype)proxyWithTarget:(id)target; |
| | | |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |