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 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