Автоматический подсчет ссылок
ARC автоматически добавляет retain
/ release
при компиляции кода.
В этом случае c
и d
выпущены сразу, так как на них нет сильных указателей.a
и b
имеют сильные указатели на свои переменные, и компилятор добавит вызов release
, когда эти переменные выйдут из области видимости (в конце метода).Если вы используете __weak
для одной из переменных, она будет сразу же освобождена.
Порядок между освобождаемыми a
и b
является подробностью реализации ARC, и, вероятно, это не так.разумно полагаться на него, поскольку Clang не дает никаких гарантий относительно порядка, поэтому он может потенциально измениться.