• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
How To Safely Invoke a Block
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How To Safely Invoke a Block


  • Subject: How To Safely Invoke a Block
  • From: Andreas Grosam <email@hidden>
  • Date: Wed, 21 Nov 2012 11:56:45 +0100

I've defined a class Foo that defines a block via a property:

@property (copy) void (^progressHandler)(RXProgressState progressState, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite);

The property is synthesized by the compiler, ARC enabled.

The block is usually invoked on a private thread for several times until an action finishes (an asynchronous NSURLConnection).
A client of class Foo should be able to set the block property at any time from any thread - that is it should also be able to set the block to NULL.  Now, I'm worried about thread safety.

First, is it a good measurement to use a property with the "atomic" attribute?

Secondly, I'm invoking the block as follows (from within a NSURLConnectionDelegate method):

    progress_handler_block_t block;
    if ( (block=self.progressHandler) != NULL) {
        block(RXProgressStateStart, 0, self.source.size);
    }


since it appears to me, that

    if (_progressHandler) {
        _progressHandler(RXProgressStateStart, 0, self.source.size);
    }

or

    if (self.progressHandler) {
        self.progressHandler(RXProgressStateStart, 0, self.source.size);
    }

isn't thread safe.


Your comments are welcome!


Regards
Andreas
_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

  • Follow-Ups:
    • Re: How To Safely Invoke a Block
      • From: James Montgomerie <email@hidden>
    • Re: How To Safely Invoke a Block
      • From: Tom Davie <email@hidden>
  • Prev by Date: Does UIStoryboard know how to find the ~ipad version automatically?
  • Next by Date: Re: How To Safely Invoke a Block
  • Previous by thread: Re: Does UIStoryboard know how to find the ~ipad version automatically?
  • Next by thread: Re: How To Safely Invoke a Block
  • Index(es):
    • Date
    • Thread