On Jun 25, 2009, at 12:11 PM, Kyle Sluder wrote:

[...] .NET users often call Dispose()
explicitly, because it is useful in situations other than inside using
blocks.

Though, to be clear (lest the tendency to want to put down the other be allowed to go too far)...

The requirement in .NET that Dispose() be safe to call multiple times has very little to do with how _client_ code is expected to use it, and more to do with the GC system. In particular, the order of finalizer execution is indeterminate, and the usual job of a finalizer is to call Dispose() on the object in which it's implemented, which in turn may call Dispose() on other objects referenced by that object.

Without a requirement that Dispose() be safe to call multiple times, the caller of Dispose() would have to always check to see whether the object has been disposed yet, because an object that is being disposed by some other object being finalized might already have been disposed by the first object's finalizer.

Certainly it would be unusual, and generally a sign of sloppy programming, for _client_ code to call Dispose() on an object more than once (or for the finalizer to be executed, for that matter). The rules are there to make the system more robust, not to encourage sloppy programming (though of course, unfortunately, the former does sometimes lead to the latter).

I admit, I'm not well-versed on what the equivalent paradigm in Obj-C/ Cocoa is. But, surely it's useful even in Obj-C/Cocoa to provide protections within the language and framework against sloppy programming, even as it should be clear that sloppy programming isn't to be tolerated.

Pete
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to