mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Matlab
		
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Matlab
		
	
| 
											5 years ago
										 | #import <Foundation/Foundation.h> | ||
|  | #import "NSTimer+Proxying.h" | ||
|  | #import <objc/runtime.h> | ||
|  | 
 | ||
|  | NS_ASSUME_NONNULL_BEGIN | ||
|  | 
 | ||
|  | @interface NSTimerProxy : NSObject | ||
|  | 
 | ||
|  | @property (nonatomic, weak) id target; | ||
|  | @property (nonatomic) SEL selector; | ||
|  | 
 | ||
|  | @end | ||
|  | 
 | ||
|  | @implementation NSTimerProxy | ||
|  | 
 | ||
|  | - (void)timerFired:(NSDictionary *)userInfo | ||
|  | { | ||
|  | #pragma clang diagnostic push | ||
|  | #pragma clang diagnostic ignored "-Warc-performSelector-leaks" | ||
|  |     [self.target performSelector:self.selector withObject:userInfo]; | ||
|  | #pragma clang diagnostic pop | ||
|  | } | ||
|  | 
 | ||
|  | @end | ||
|  | 
 | ||
|  | static void *kNSTimer_SN_Proxy = &kNSTimer_SN_Proxy; | ||
|  | 
 | ||
|  | @implementation NSTimer (Session) | ||
|  | 
 | ||
|  | - (NSTimerProxy *)sn_proxy | ||
|  | { | ||
|  |     return objc_getAssociatedObject(self, kNSTimer_SN_Proxy); | ||
|  | } | ||
|  | 
 | ||
|  | - (void)sn_setProxy:(NSTimerProxy *)proxy | ||
|  | { | ||
|  |     #if DEBUG | ||
|  |     assert(proxy != nil); | ||
|  |     #endif | ||
|  |     objc_setAssociatedObject(self, kNSTimer_SN_Proxy, proxy, OBJC_ASSOCIATION_RETAIN); | ||
|  | } | ||
|  | 
 | ||
|  | + (NSTimer *)weakScheduledTimerWithTimeInterval:(NSTimeInterval)timeInterval | ||
|  |                                          target:(id)target | ||
|  |                                        selector:(SEL)selector | ||
|  |                                        userInfo:(nullable id)userInfo | ||
|  |                                         repeats:(BOOL)repeats | ||
|  | { | ||
|  |     NSTimerProxy *proxy = [NSTimerProxy new]; | ||
|  |     proxy.target = target; | ||
|  |     proxy.selector = selector; | ||
|  |     NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:timeInterval | ||
|  |                                                       target:proxy | ||
|  |                                                     selector:@selector(timerFired:) | ||
|  |                                                     userInfo:userInfo | ||
|  |                                                      repeats:repeats]; | ||
|  |     [timer sn_setProxy:proxy]; | ||
|  |     return timer; | ||
|  | } | ||
|  | 
 | ||
|  | @end | ||
|  | 
 | ||
|  | NS_ASSUME_NONNULL_END |