FROM : Rob Ross
DATE : Sat Jul 08 03:18:44 2006
On Jul 7, 2006, at 6:07 PM, Shawn Erickson wrote:
> On 7/7/06, Damien Sorresso <<email_removed>> wrote:
>> On 7 Jul, 2006, at 7:29 PM, Rob Ross wrote:
>>
>> > I'm just learning Obj-C myself, so maybe my understanding is not
>> > correct. But, don't you actually have the option to use static
>> > typing in certain instances, and use dynamic typing in others?
>> >
>> > Eg:
>> >
>> > id myStr;
>> >
>> > vs
>> >
>> > NSString *myStr;
>> >
>> >
>> > Won't the second version give you the benefits of static typing
>> > (compiler time checking)?
>> >
>>
>> Well, kinda sorta. The compiler will check, but the messages are
>> still bound at runtime. For example, this statement won't even
>> generate a warning.
>>
>> NSString *str = [[NSData alloc] init];
>>
>> because both `NSData' and `NSString' have `init' methods, and `init'
>> methods return an object of type `id', which is NOT statically typed.
>
> ...but the point is you could implement classes that are specific
> about what they return (I often do that with my init methods) and the
> compiler would flag this for you.
Are you saying you can write an init method with a signature like this:
- (FooClass *)init;
I thought that if you overrode a method from a superclass, the
signatures must match (including the return type).
Or am I wrong about that?
Rob
DATE : Sat Jul 08 03:18:44 2006
On Jul 7, 2006, at 6:07 PM, Shawn Erickson wrote:
> On 7/7/06, Damien Sorresso <<email_removed>> wrote:
>> On 7 Jul, 2006, at 7:29 PM, Rob Ross wrote:
>>
>> > I'm just learning Obj-C myself, so maybe my understanding is not
>> > correct. But, don't you actually have the option to use static
>> > typing in certain instances, and use dynamic typing in others?
>> >
>> > Eg:
>> >
>> > id myStr;
>> >
>> > vs
>> >
>> > NSString *myStr;
>> >
>> >
>> > Won't the second version give you the benefits of static typing
>> > (compiler time checking)?
>> >
>>
>> Well, kinda sorta. The compiler will check, but the messages are
>> still bound at runtime. For example, this statement won't even
>> generate a warning.
>>
>> NSString *str = [[NSData alloc] init];
>>
>> because both `NSData' and `NSString' have `init' methods, and `init'
>> methods return an object of type `id', which is NOT statically typed.
>
> ...but the point is you could implement classes that are specific
> about what they return (I often do that with my init methods) and the
> compiler would flag this for you.
Are you saying you can write an init method with a signature like this:
- (FooClass *)init;
I thought that if you overrode a method from a superclass, the
signatures must match (including the return type).
Or am I wrong about that?
Rob






Cocoa mail archive

