Да, точнее, вероятно, он инициализирует счетчик хранения равным 1.
Это то же самое, что наличие [sushiTypes retain].Я знаю, что если мы вызовем retain, объект будет удерживаться до тех пор, пока мы его не отпустим.
Не то же самое.Это увеличит количество сохраняемых кадров в два раза.Нет особой причины увеличивать счет дважды в одном и том же месте.Если вы это сделаете, вы будете ответственны за повторный вызов release.
У вас есть сохраненные sushiTypes.Этот sushiTypes был передан функции в качестве аргумента.Позже в функции вы выпустили его.Это освободит память о sushiTypes?в противном случае sushiTypes больше не существует.
Во-первых, вы должны убедиться, что понимаете, освобождает ли релиз память или нет, зависит от того, есть ли другие владельцы, которые имеют ссылку на объект.Если [_sushiTypes release] удерживал объект более чем в одной вещи, тогда освобождение не освобождает память в этом случае.
Во-вторых, плохая идея.Чтобы сохранить здравый смысл с подсчетом ссылок, вы должны следовать определенным шаблонам.
сохранить (или выделить) переменные экземпляра, освободить их в dealloc или ранее.при необходимости сохраните (или выделите) локальные переменные и отпустите их перед выходом из метода.Вызывающая сторона не владеет возвращаемым значением функции.Это подразумевает, что вы обрабатываете возвращаемое значение функции, как локальную переменную, но автоматически освобождаете его, прежде чем возвращать, а не освобождать.Это гарантирует, что оно продлится, по крайней мере, достаточно долго, чтобы вызывающая сторона могла сохранить его, если это необходимо.Один из шаблонов заключается не в том, чтобы вызывающий метод мог владеть ссылкой на аргумент метода, а в том случае, когда функция возвращает вызывающий объект, которому не принадлежит ссылка.Метод не должен освобождать ссылку вызывающей стороны.
Следуйте 2.1, вместо выпуска sushiTypes.Я создал локальную переменную NSArray * sushiTypes = _sushiTypes.Если я выпустил sushiTypes, он также выпустит sushiTypes.Или, если я сохраню sushiTypes, он также сохранит _sushiTypes.
Сохранение и освобождение отправляются объектам, а не ссылкам.sushiTypes и _sushiTypes ссылаются на один и тот же объект, поэтому для одного и того же вызова вызывается retain или release, как и для другого.
Допустимо, но, вероятно, нет необходимости [sushiTypes retain], а затем в том же методе [_sushiTypes release.Но не делайте только [выпуск sushiTypes], тем самым экспроприируя собственность _sushiTypes над объектом.