On Jul 14, 2008, at 3:16 AM, Bill Bumgarner wrote:

On Jul 13, 2008, at 11:35 PM, Jeff Johnson wrote:

On the other hand, the function method_exchangeImplementations() just became public API in Leopard, so I don't see how that can break anytime soon. It's not much different than subclassing or 'categorizing'.

Correct. However, it is what you are using method_exchangeImplementations() for that is problematic. Namely, you are editing the method tables for an Apple supplied class. This is unsupported and may be problematic for any number of reasons -- KVO, IMP caching, internal implementation details, etc...

It is quite a bit different than either subclassing or using categories.

For subclassing, you override behavior and, if you are doing it right, don't break encapsulation -- don't access your super's instance variables directly and do use API to manipulate super's state (unless, of course, super is actually a class of your own design -- then it is all fair game, but you should still consider carefully how the super/sub relationship should be work).

For categories, all is well until the moment you override an existing method in a class other than your own. At that point, you are asking for a world of maintenance headaches and a whole lot of fun debugging stuff.

b.bum


I can't imagine much use for method_exchangeImplementations() with my own classes, because I can write the implementations myself. You certainly need to be careful, but my example seemed pretty innocuous. Calling at the beginning of main() should avoid IMP caching issues, should it not?

As I said, I was just doing a proof of concept. I haven't shipped any apps with that code, though I know plenty of developers who have shipped much 'worse'. Even published API sometimes break, so development always involves the assessment of risk and reward, and as far as I know, Apple provides no official support for developers apart from paid DTS incidents.

-Jeff

_______________________________________________

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 [EMAIL PROTECTED]

Reply via email to