Yes. The type of your object will be the one used by the alloc method. If you allocated with NSMutableString, then your object will be a member of NSMutableString class.
NSString *myString=[[NSMutableString alloc]init];
What's going on it's you have a pointer for the allocated object with the type of it's parent class, so the compiler will not see methods of NSMutableString and will get a warning if you try to call them directly.
But again, your object it's still a member of NSMutableString class, and it will respond to messages of NSMutableString class.
Even though you declared myString as a pointer to a NSString, you can perform this test the see what I'm talking:
BOOL test = [myString isKindOfClass:[NSMutableString class]]; //this will hold true
You can even perform a cast to do a method call explicit.
NSString *myString=[[NSMutableString alloc]init];
[(NSMutableString*)myString someNSMutableStringSpecificMethod];
PS: this counts not only for mutable / immutable objects, but for all specialization classes