However, under certain circumstances, ARC is permitted to re-order and
eliminate operations in a manner which may alter the overall
computation history beyond what is permitted by the general "as if"
-rule of C/C++ and the :ref:`restrictions <_arc.objects.retains>` on
+rule of C/C++ and the :ref:`restrictions <arc.objects.retains>` on
the implementation of ``retain`` and ``release``.
.. admonition:: Rationale
example, consider the following code:
.. code-block:: objc
+
id x = _ivar;
[x foo];
itself cause dependence, but since generally the optimizer will not
be able to prove that the function doesn't depend on that parameter,
it will be forced to conservatively assume it does.
-
+
Dependency propagates to values loaded from a pointer because those
values might be invalidated by deallocating the object. For
example, given the code ``__strong id x = p->ivar;``, ARC must not