Ответ 1
Автореферат как механизм по-прежнему используется ARC, кроме того, компилятивный код ARC предназначен для беспрепятственного взаимодействия с компилированным кодом MRC, так что авторефератное оборудование находится вокруг.
Во-первых, не думайте в терминах ссылок, но с точки зрения доли владения - пока существует заявленная доля собственности в объекте, тогда объект живет, когда нет доли собственности, он уничтожается. В MRC вы объявляете права собственности, используя retain
, или создавая новый объект; и вы отказываетесь от доли участия, используя release
.
Теперь, когда метод callee создает объект и хочет вернуть его своему вызывающему абоненту, вызывающая сторона уходит, поэтому ему необходимо отказаться от права собственности, и поэтому вызывающему абоненту необходимо объявить о своей заинтересованности или объект может быть уничтожен. Но есть проблема, вызывающая сторона заканчивается до того, как вызывающий получает объект - поэтому, когда вызывающий абонент отказывается от своего права собственности, объект может быть уничтожен до того, как у вызывающего есть возможность объявить его интерес - нехорошо.
Для решения этой проблемы используются два решения:
1) Объявлен способ передачи доли владения в возвращаемое значение от вызываемого абонента - это модель, используемая для методов init
, copy
и т.д. Обвиняемый никогда не уведомляет, что он отказывается от своей доли владения, а вызывающий не объявляет права собственности - по соглашению абонент просто берет на себя долю собственности и несет ответственность за отказ от нее позже.
2) Объявлен метод, чтобы вернуть значение, в котором у вызывающего лица нет доли владения, но кто-то еще будет поддерживать долю собственности в течение некоторого короткого периода времени - обычно до конца текущего цикла цикла цикла. Если вызывающий абонент хочет использовать возвращаемое значение дольше, чем это, он должен объявить свою собственную долю владения, но в противном случае он может полагаться на кого-то, у кого есть доля собственности и, следовательно, объект остается.
Вопрос в том, кто может "кто-то" быть тем, кто поддерживает права собственности? Это не может быть метод вызова, поскольку он собирается уйти. Введите "пул авторесурсов" - это просто объект, на который кто-либо может передать долю владения, чтобы объект оставался на некоторое время. Пул авторекламы будет отчуждать свою долю владения во всех объектах, переданных ему таким образом, когда им будет дано указание - обычно в конце текущего цикла цикла цикла.
Теперь, если это имеет смысл (то есть, если я объясню это ясно), вы можете видеть, что метод (2) действительно не требуется, поскольку вы всегда можете использовать метод (1); но, и это важно, но, в рамках MRC, для программиста гораздо больше работы - каждое значение, полученное от метода, связано с интересом к владению, которому в какой-то момент нужно управлять и отказаться от него - создать строку для ее вывода? Ну, тогда вам нужно отказаться от вашего интереса к этой временной строке... Так что (2) облегчает жизнь.
В одних руках компьютеры просто быстрые идиоты, а подсчет вещей и вставка кода для отказа от участия в собственности от имени интеллектуальных программистов - это то, к чему они хорошо подходят. Поэтому ARC не нуждается в пуле автоматического выпуска. Но это может сделать все проще и эффективнее, и за кулисами ARC оптимизирует его использование - посмотрите на выход ассемблера в Xcode, и вы увидите вызовы подпрограмм с именем, похожим на "keepAutoreleasedReturnValue"...
Итак, вы правы, его не нужно, но все равно полезно, но при ARC вы можете (обычно) забыть, что он даже существует.
HTH больше, чем это, вероятно, смущает!