On 19/11/2010, at 12:38, Jonny Taylor wrote:

>  …
>  
> Can anybody comment on whether I am doing something strange here 

Well I see something strange in here

> Sample code to demonstrate this in a fresh Cocoa project (main.m) with Xcode 
> 3.2.1/gcc 4.2 is as follows:
> 
> //==========
> @protocol MyProtocol <NSObject>
>       @property int genericProperty;
>       -(void)subclassSpecificImplementationOfGenericFunction;
> @end
> 
> @interface MyBaseClass : NSObject
>       @property int genericProperty;
> @end

This class does not conform to MyProtocol. It defines another property, by the 
way with the same name.

> 
> @interface MySubclass : MyBaseClass <MyProtocol>
>       -(void)subclassSpecificImplementationOfGenericFunction;
> @end

Then, this subclass conforms to MyProtocol, so it may implement that property 
defined in the protocol.

> 
> @implementation MyBaseClass
>       @synthesize genericProperty;
> @end

This is ok, you synthesized the original class property.

> 
> @implementation MySubclass
>       -(void)subclassSpecificImplementationOfGenericFunction { return; }
> @end

Now, you haven't implemented the protocol property!

> // I find myself writing "@dynamic genericProperty" here to shut up the 
> compiler warning

That means you're going to provide the implementation directly in runtime. Will 
you?

> // that reads "warning: property 'genericProperty' requires method 
> '-genericProperty' to be defined - use @synthesize, @dynamic or provide a 
> method implementation"

As explained above, you haven't implemented it and this is referring to the 
protocol property declaration.

> //==========
> 
> Aside from the warning, this compiles and can be tested with the following 
> code which runs correctly, printing out "ok (1, 2)":
> 
> //==========
>       MySubclass *s = [[MySubclass alloc] init];
>       s.genericProperty = 1;
>       int a = s.genericProperty;
>       id<MyProtocol> s2 = s;
>       s2.genericProperty = 2;
>       int b = s2.genericProperty;
>       printf("ok (%d %d)\n", a, b);
> //==========

It works because you're using the superclass property 
here._______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to