Это правило:
Если вы вызываете метод, который возвращает объект и:
- начинается с
new
- начинается с
alloc
- is
retain
- содержит
copy
, тогда вы несете ответственность за освобождение (или автоматическое освобождение) возвращенного объекта.В только раз этого не будет, если в документации указано иное.Вы также можете увидеть в заголовочных файлах, что метод аннотирован макросом NS_RETURNS_RETAINED
.(Заголовочный файл считается документацией)
Простой способ запомнить это "NARC" (new-alloc-retain-copy).
В вашем примере, поскольку URLWithString:
неначинаются с new
или alloc
, не содержат copy
и не retain
, тогда вы не должны освобождать возвращаемый объект.Это является нарушением руководящих принципов управления памятью и приведет к сбою приложения (если вы не делаете глупостей в другом месте).