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]