arrayData
is a variable. It is a reference (pointer) variable, so it refers something.
What it refers to, the target of the pointer, is an object.
In Objective-C all objects are heap allocated, that means, that they are created solely at runtime in heap memory. In such a case you always need a reference to it, which is typically a variable allocated in stack memory.
Try this:
NSMutableString *string = [NSMutableString new]; // A variable string referring a mutable string object;
NSMutableString *string2 = string; // Another variable string2 referring the same (identical) mutable string object.
[string appendString:@"Amin"]; // The object, string refers to is now "string"
NSLog( @"%@", string2 ); // The same (identical) object, referred by another variable is now "string", too.
To make it more complex, C – the base of Objective-C – calls an "object" everything that lives at runtime: Variables, OOP-objects, …