NSOperation & Singletone : Correct concurency design
===

I need an advice from you guys on the design of my app here, basically I would like to know if it will work as I expect ? As the multi-threading is quite tricky thing I would like to hear from you.

**Basically my task is very simple** -I've `SomeBigSingletonClass` - big singleton class, which has two methods `someMethodOne` and `someMethodTwo`
These methods should be invoked periodically (timer based) and in separate threads. 
But there should be only one instance of each thread at the moment, e.g. there should be only one running `someMethodOne` at any time and the same for `someMethodTwo`.

**What I've tried** 
**GCD** - Did implementation with GCD but it lacks very important feature, it does not provide means to check if there is any running task at the moment, i.e. I was not able to check if there is only one running instance of let say `someMethodOne` method.

**NSThread** - It does provide good functionality but I'm pretty sure that new high level technologies like NSOperation and GCD will make it more simple to maintain my code. So I decided to give-up with NSThread.

**My Solution with `NSOperation`** 
How I plan to implement the two thread invokation 

   

    @implementation SomeBigSingletonClass
    
    - (id)init
    {
        ...
        // queue is an iVar
        queue = [[NSOperationQueue alloc] init];
        ...
    }
    
    + (SomeBigSingletonClass *)sharedInstance
    {
        static SomeBigSingletonClass *sharedInstance = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            sharedInstance = [[SomeBigSingletonClass alloc] init];
        });
        return sharedInstance;
    }
    
    - (void)someMethodOne
    {
        SomeMethodOneOperation *one = [[SomeMethodOneOperation alloc] init];
        [queue addOperation:one];
    }
    
    - (void)someMethodTwo
    {
        SomeMethodTwoOperation *two = [[SomeMethodOneOperation alloc] init];
        [queue addOperation:two];
    }
    @end 
    
And finally my NSOperation inherited class will look like this

    @implementation SomeMethodOneOperation
     
    - (id)init
    {
        if (![super init]) return nil;
        return self;
    }
     
    - (void)main {
        [[SomeBigSingletonClass sharedInstance] doMethodOneStuff];
    }
     
    @end

And the same for `SomeMethodTwoOperation` operation class.
