Re: How to implement readonly property
Re: How to implement readonly property
- Subject: Re: How to implement readonly property
- From: Ken Thomases <email@hidden>
- Date: Sun, 09 Dec 2012 10:52:21 -0600
On Dec 9, 2012, at 10:37 AM, Kyle Sluder wrote:
> On Dec 9, 2012, at 6:53 AM, Ken Thomases <email@hidden> wrote:
>
>> On Dec 9, 2012, at 1:27 AM, Kyle Sluder wrote:
>>
>>> If dispatch_once() really is unsuitable for use with a dispatch_once_t
>>> stored in Objective-C instance storage, then the correct example in the
>>> paper I've cited might be a sufficient workaround.
>>
>> I thought we had established that, in all sane use cases, an instance variable once predicate is fine.
>
> Hence the hedge. ;-)
>
>> The cases where an instance variable once predicate would be unsafe are exactly the cases where it would be unsafe to access any instance variable, including the isa pointer. So, if you're using the instance in any way, you've already assumed conditions that make the once predicate fine. (And, hopefully, you've more than assumed it, you've ensured it by proper inter-thread communication of the object pointer.)
>
> Yes, but as Greg pointed out the real danger comes from not understanding all the nuances of this, and assuming that dispatch_once is a more powerful synchronization primitive than it really is.
I'm still not understanding the circumspection. The use of dispatch_once() never _contributes_ to unsafe access. It is unsafe if the situation is already unsafe. If you try to avoid using dispatch_once() using other techniques like @synchronized(self), etc., that doesn't help anything.
Intellectually, I understand the concern that people will assume that dispatch_once() introduces safety where it doesn't, but as a practical matter I'm finding it hard to imagine a scenario where a) that comes up or b) avoiding dispatch_once() for some vague (to the naive developer) notion that it's unsafe would lead to better safety. Can you or Greg illustrate with an example?
I feel that dispatch_once() with an instance variable once predicate _is_ the right answer for the class of problems where people would be tempted to use it and that we should be encouraging developers to rely on it rather than invariably worse alternatives.
Regards,
Ken
_______________________________________________
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