Most of the people, when they started with objective c, were setting every property as “strong" or “weak". But those are not the only types for properties. By definition, “strong" type retains a reference of the object, and it will keep it until is set to nil. We are not copying the object, we are using the same object reference in different places, and “that" could give you a headache.
In general, we should use “copy" for any instance of a class that has a mutable subclass (NSArray, NSString..), Why? because is safer to copy the object, do whatever you want to do with it, rather than use the same reference with maybe other owners.
Lets see this with one example,
Our main array, it's gonna contain information that we want to keep in our class
@property (nonatomic, strong) NSMutableArray *myPreciousArray;
_myPreciousArray = [@[@"A", @"B", @"C"] mutableCopy ];
(So, now we have set up another array)
NSMutableArray * dirtyArray = [NSMutableArray new];
dirtyArray = _myPreciousArray;
Then, and this is the important part, if we change the dirtyArray:
We are changing the value in both arrays,
NSLog(@"%@", _myPreciousArray);
Try now with (nonatomic, copy) ...