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
							 |