tmpArray
- указатель, и он инициализируется так, чтобы указывать на тот же изменяемый массив, на который указывает sharedMutableArray.По этой причине строка:
[tmpArray removeAllObjects];
освободит массив, и любой, кто использует sharedMutableArray
, увидит это изменение.Другими словами, присваивание
NSMutableArray *tmpArray = sharedMutableArray;
не делает копию самого массива, оно только копирует указатель.Любые сообщения, которые вы отправляете с помощью этого указателя, будут отправлены в общий массив.Аналогично, присвоение nil
tmpArray
устанавливает указатель tmpArray
, но ничего не делает с самим массивом.
Наконец, установка переменной в nil
никогдаосвобождает памятьУстановка свойства на nil, с другой стороны, освободит память при некоторых условиях (например, когда объявлено, что свойство сохраняет свое содержимое).Вы устанавливаете здесь переменную, а не свойство, поэтому нет никаких шансов, что массив будет освобожден.