ARC Semantic Issue with simple protocol example? <p>I have just been trying something out with a quick test and I have a question, in the following code:</p> <pre><code>@protocol stuffieProtocol &lt;NSObject&gt; @required -(void)favouiteBiscuit; @end </code></pre> <p>.</p> <pre><code>// DOG &amp; TED ARE IDENTICAL, THEY JUST LIKE DIFFERENT BISCUITS @interface Dog : NSObject &lt;stuffieProtocol&gt; @property (strong, nonatomic) NSString *name; @end @implementation Dog - (id)init { return [self initWithName:@"Unknown"]; } - (id)initWithName:(NSString *)name { self = [super init]; if(self) { _name = name; } return self; } - (void)whoAreYou { NSLog(@"MY NAME IS: %@ I AM A: %@", [self name], [self class]); } - (void)favouiteBiscuit { NSLog(@"FAVOURITE BISCUIT IS: Costa Jam Biscuit"); } @end </code></pre> <p>.</p> <pre><code>Dog *stuffie_001 = [[Dog alloc] initWithName:@"Dog Armstrong"]; Ted *stuffie_002 = [[Ted alloc] initWithName:@"Teddy Sullivan"]; NSArray *stuffieArray = @[stuffie_001, stuffie_002]; for(id&lt;stuffieProtocol&gt; eachObject in stuffieArray) { [eachObject whoAreYou]; // &lt;&lt; ERROR [eachObject favouiteBiscuit]; } </code></pre> <p>My question is I am getting an error <code>"ARC Semantic Issue: No known instance method for selector 'whoAreYou'"</code> </p> <p>If I prefix <code>[eachObject whoAreYou];</code> with <code>[(Dog *)eachObject whoAreYou];</code> then this works for all the iterations of the loop, but that just feels wrong as the all the objects in the array are not of type <code>Dog</code>.</p> <p>What should I be prefixing this with to be correct?</p>