@@ -19,10 +19,14 @@ #define ZD "%zd" #else #define ZD "%u" #endif +IMP init; +IMP retain; +IMP release; + @interface TestObject: OFObject - init; - retain; - (void)release; @end @@ -30,11 +34,11 @@ @implementation TestObject - init { id ret; - ret = [super init]; + ret = init(self, @selector(init)); printf("New %s with retain cnt " ZD "\n", [self name], [ret retainCount]); return ret; } @@ -41,28 +45,33 @@ - retain { id ret; - ret = [super retain]; + ret = retain(self, @selector(retain)); printf("Retaining %s to " ZD "\n", [self name], [ret retainCount]); return ret; } - (void)release { printf("Releasing %s to " ZD "\n", [self name], [self retainCount] - 1); - return [super release]; + release(self, @selector(release)); } @end int main() { - [TestObject poseAs: [OFObject class]]; + init = [OFObject replaceMethod: @selector(init) + withMethodFromClass: [TestObject class]]; + retain = [OFObject replaceMethod: @selector(retain) + withMethodFromClass: [TestObject class]]; + release = [OFObject replaceMethod: @selector(release) + withMethodFromClass: [TestObject class]]; OFObject *o1, *o2, *o3; OFAutoreleasePool *pool1, *pool2; o1 = [[OFObject new] autorelease];