ObjC internals. Why my duck typing attempt failed?

Posted by Piotr Czapla on Stack Overflow See other posts from Stack Overflow or by Piotr Czapla
Published on 2010-04-25T18:31:04Z Indexed on 2010/04/25 18:33 UTC
Read the original article Hit count: 235

Filed under:

I've tried to use id to create duck typing in objective-c. The concept looks fine in theory but failed in practice. I was unable to use any parameters in my methods. The methods were called but parameters were wrong. I was getting BAD_ACESS for objects and random values for primitives. I've attached a simple example below.

The question: Does any one knows why the methods parameters are wrong? What is happening under the hood of the objective-c?

Note: I'm interest in the details. I know how to make the example below work.

An example: I've created a simple class Test that is passed to an other class using property id test.

@implementation Test
- (void) aSampleMethodWithFloat:(float) f andInt: (int) i {
    NSLog(@"Parameters: %f, %i\n", f, i);
}
@end

Then in the class the following loop is executed:

for (float f=0.0f; f < 100.0f ; f += 0.3f) {
    [self.test aSampleMethodWithOneFloatParameter: f]; // warning: no method found.
}

Here is the output that I'm getting. As you can see the method was called but the parameters were wrong.

Parameters: 0.000000, 0
Parameters: -0.000000, 1069128089
Parameters: -0.000000, 1070176665
Parameters: 2.000000, 1070805811
Parameters: -0.000000, 1071225241
Parameters: 0.000000, 1071644672
Parameters: 2.000000, 1071854387
Parameters: 36893488147419103232.000000, 1072064102
Parameters: -0.000000, 1072273817
Parameters: -36893488147419103232.000000, 1072483532

© Stack Overflow or respective owner

Related posts about objective-c