• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: The Unadopted Protocol
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: The Unadopted Protocol


  • Subject: Re: The Unadopted Protocol
  • From: Dave DeLong <email@hidden>
  • Date: Wed, 02 Jun 2010 10:03:39 -0600

Mostly d, but partly f.  It's d in that it's well-known that you can send any message you want to an id, but f in that the scenario you came up with is a slightly unusual one.

Dave

On Jun 2, 2010, at 9:57 AM, Matt Neuburg wrote:

> Here's something I stumbled on by accident. Consider the following:
>
> //  MyClass.h
> #import <Foundation/Foundation.h>
> @interface MyClass : NSObject {
> }
> @end
>
> //  MyClass.m
> #import "MyClass.h"
> @implementation MyClass
> - (void) testing {
>    NSLog(@"testing");
> }
> @end
>
> //  UnadoptedProtocolAppDelegate.h
> #import <Cocoa/Cocoa.h>
> ... // skipping irrelevant stuff
> @protocol Unadopted
> - (void) testing;
> @end
>
> //  UnadoptedProtocolAppDelegate.m
> #import "UnadoptedProtocolAppDelegate.h"
> #import "MyClass.h"
> @implementation UnadoptedProtocolAppDelegate
> - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
>    MyClass* mc = [[MyClass alloc] init];
>    [(id)mc testing];
> }
> @end
>
> This compiles and runs fine, even though MyClass never adopted the protocol
> Unadopted. It take it that by casting mc to an id, I cause the compiler to
> grasp at the only signature for "testing" that it knows about, namely the
> one in the protocol. So it happily uses that signature without complaint,
> and at runtime the correct message is sent to the MyClass instance.
>
> So this appears to be a technique for implementing a highly informal
> protocol. (The technique is: define a protocol, don't bother adopting it
> anywhere, but send messages defined in that protocol to an id.) My question
> is, is this technique:
>
> (a) pointless and lazy
>
> (b) sneaky and clever
>
> (c) just a mistake all round
>
> (d) well known; you only just noticed this??
>
> (e) all of the above
>
> (f) none of the above
>
> :) m.
>
> --
> matt neuburg, phd = email@hidden, <http://www.tidbits.com/matt/>
> A fool + a tool + an autorelease pool = cool!
> AppleScript: the Definitive Guide - Second Edition!
> http://www.tidbits.com/matt/default.html#applescriptthings
>
>
>
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> 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:
>
> This email sent to email@hidden

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

References: 
 >The Unadopted Protocol (From: Matt Neuburg <email@hidden>)

  • Prev by Date: The Unadopted Protocol
  • Next by Date: Re: The Unadopted Protocol
  • Previous by thread: The Unadopted Protocol
  • Next by thread: Re: The Unadopted Protocol
  • Index(es):
    • Date
    • Thread