On Dec 1, 2013, at 07:26 , Kevin Meaney <[email protected]> wrote:

> This property is mostly changed on a queue that is not the main queue (gcd 
> queues, not NSOperation queues). Everything works as I would like but I'm 
> concerned that it is only working out of luck rather than proper design.

You didn’t actually state the nature of your concern. You’re worried 
specifically about the problem of triggering a UI update on a background 
thread? If so, then, yes, you’ve been lucky if it worked.

> Has something changed in Mavericks so that doing this is no longer a problem, 
> or do I need to fix.

Nothing’s changed in Mavericks AFAIK, so you should fix your code.

> Because this is a simple case (I know when I'm not on the main thread) I can 
> easily fix with just wrapping the modification of the property like so:
> 
> __weak AppDelegate *weakSelf = self;
> dispatch_async(dispatch_get_main_queue(), ^
> {
>  AppDelegate *strongSelf = weakSelf;
>  if (strongSelf)
>    strongSelf.isAgentRunning = isRunning ? @"Yes" : @"No";
> });
> 
> But of course this is fine in my simple case, and since this is all I need 
> I'll go with this.

Yes, but why are you taking the trouble to “avoid” a reference cycle when none 
can be formed? What’s wrong with the simple version?

        dispatch_async(dispatch_get_main_queue(), ^
        {
                self.isAgentRunning = isRunning ? @"Yes" : @"No";
        });

Certainly the block captures ‘self’ in this case, but nothing other than the 
queue captures the block.

> But what I suppose I'm asking is, are others using the receptionist design 
> pattern, is it the way to go for a robust solution to this problem?

It’s no robuster than the “simple” solution. It’s useful when the object 
modifying the property doesn’t or can’t know whether it’s a background thread — 
for example, when it’s in a 3rd party library you don’t control. But in your 
own code, you can always use [NSThread isMainThread] to decide whether to 
update the property synchronously or asynchronously.

_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to