MethodReplacement

Last Revision:
Version 1.0, 2006-08-01
Demonstrates an Objective C 2 compatible way to replace a method in an existing Objective C class.
Build Requirements:
Leopard Preview
Runtime Requirements:
Leopard Preview

Objective C 2.0 compatible class_poseAs() replacement. This demonstrates how to replace a method in an existing Objective C class, and how to call the old version without having to store IMP function pointers in a global. The trick is to define a category on the class whose method you want to replace. In the category, declare and implement a method with the same signature as the replaced method. In the +load method of the category, look up the original and replacement methods using class_getInstanceMethod(), then call method_exchangeImplementations(). Subsequent calls to the original method will call the replacement method, and an apparently recursive call to the replacement method will call the original method.