NSTimer没有从Singleton Class中解雇

时间:2016-07-19 15:14:22

标签: ios objective-c singleton nstimer

我有一个单例类,我想在后台运行并检查要上传的照片。单例通过

从另一个viewcontroller初始化
[[EXOImageUploader sharedPhotoUploader] startPhotoUploadCheck];

如果我NSLog一切,看起来单身人士正在工作。我可以在单身中做其他事情,下面没有显示就好了。 NSTimer永远不会发射。我甚至注释掉了检查计时器isValid但是也不起作用的行。

有关我的定时器工作原理的任何想法?

以下是NSLog吐出的顺序。

  1. sharedPhotoUploader init
  2. doSetup
  3. 计时器间隔:1.000000
  4. sharedPhotoUploader singleton
  5. startPhotoUploadCheck
  6. 以下是代码。

    ·H

    @interface EXOImageUploader : NSObject
    @property (assign) NSTimeInterval timerCheckInterval;
    
    + (EXOImageUploader *) sharedPhotoUploader;
    
    - (void) startPhotoUploadCheck;
    - (void) stopPhotoUploadCheck;
    

    的.m

    @interface EXOImageUploader ()
    
    @property (nonatomic, strong) NSTimer* timerUpload;
    @end
    
    @implementation EXOImageUploader 
    
    static EXOImageUploader* _sharedPhotoUploader;
    
    #pragma mark - SINGLETON SETUP
    
    + (EXOImageUploader *) sharedPhotoUploader {
    
        static EXOImageUploader *sharedPhotoUploader = nil;
        static dispatch_once_t onceToken;
    
        dispatch_once(&onceToken, ^{
            sharedPhotoUploader = [[self alloc] init];
             NSLog(@"sharedPhotoUploader singleton");
        });
        return sharedPhotoUploader;
    
    }
    
    - (id) init {
        if (self =  [super init]){
             NSLog(@"sharedPhotoUploader init");
            [self doSetup];
        }
    
        return self;
    }
    
    - (void) doSetup {
         NSLog(@"doSetup");
        if (!self.timerCheckInterval) {
            self.timerCheckInterval = 1.0f;
        }
        NSLog(@"Timer interval: %f", self.timerCheckInterval);
    
    }
    
    #pragma mark Public Methods
    
    - (void) startPhotoUploadCheck {
        NSLog(@"startPhotoUploadCheck");
        //Don't start a new one if this one is running
         if (!_timerUpload) {
        _timerUpload = [NSTimer timerWithTimeInterval:_timerCheckInterval target:self selector:@selector(checkForPhotosToUpload) userInfo:nil repeats:YES];
    }
    
    }
    
    - (void) stopPhotoUploadCheck {
         NSLog(@"stopPhotoUploadCheck");
        [_timerUpload invalidate];
        _timerUpload = nil;
    }
    

2 个答案:

答案 0 :(得分:1)

使用scheduledTimerWithTimeInterval代替timerWithTimeInterval

timerWithTimeInterval的文档说:“您必须使用addTimer:forMode:”将新计时器添加到运行循环中。“

使用“预定”版本,已经为您完成了。

答案 1 :(得分:0)

你试图使用你的计时器而不是初始化它,因此它将是零并且不会被激活。像这样激活您的计时器:

[timerUpload scheduledTimerWithTimeInterval:2.0
    target:self
    selector:@selector(targetMethod:)
    userInfo:nil
    repeats:NO];