FROM : Shawn Erickson
DATE : Sat Jul 08 03:07:32 2006
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.
So in many ways you can provide type information and get type related
warnings flagged by the compiler (in no way enforced at runtime of
course).
-Shawn
DATE : Sat Jul 08 03:07:32 2006
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.
So in many ways you can provide type information and get type related
warnings flagged by the compiler (in no way enforced at runtime of
course).
-Shawn






Cocoa mail archive

