This is the difference between assignment and usage. Usage being method calls. You are entirely permitted to call methods on an instance ([mString appendString:@" Block"]; //working
) but you can't assign (imString = @"Imutable Hello Block"; //error
) without tagging the variables to tell the compiler that it should enable it.
This code:
self.animatedView.backgroundColor = [UIColor blueColor];
is still not really an assignment, it's a 'hidden' method call. Dot notation is never an assignment, it's syntactic sugar for method calls. It actually translates to:
[[self animatedView] setBackgroundColor:[UIColor blueColor]];
The difference between assigning to local variables and to variables inside an object is the location in memory that they reside at. Basically, will they exist for long enough to be useful. It's the difference between data on the stack and on the heap.