Apple изменила свое правило управления памятью для соглашения об именах - PullRequest
5 голосов
/ 04 апреля 2011

Как указано в Правила управления памятью какао до

Вы становитесь владельцем объекта, если создаете его с помощью метода, имя которого начинается с «alloc» или «new» или содержит «copy» (например, alloc, newObject или mutableCopy), или если вы отправляете ему сохранить сообщение.

не читал его после декабря 2010 года, но с тех пор изменился до

Вы «создаете» объект, используя метод, имя которого начинается с «alloc», «new», «copy» или «mutableCopy» (например, alloc, newObject или mutableCopy).

Обратите внимание, что теперь требуется иметь «копию» в качестве префикса. Это привело к появлению нескольких предупреждений, связанных с памятью, от Clang Static Analyzer :(. После поиска по веб-страницам я не пришел к выводу, почему это изменилось, поскольку это одна из базовых основ управления памятью для iOS.

Кто-нибудь знает почему? Спасибо!

1 Ответ

6 голосов
/ 04 апреля 2011

Были некоторые методы, которые содержали «Копировать» в своем тексте, но явно не копировали методы.Например, +[NSData dataWithBytesNoCopy:length:].Конечно, можно было использовать аннотации для статического анализатора для информирования о нестандартном поведении, но в целом я подозреваю, что почти никто (кроме вас) никогда не писал метод копирования, который не начинался с copy или mutableCopy, поэтому они решили просто упростить вещи.

Я рад, что они сделали это, честно говоря, когда я столкнулся с противоположной проблемой, где метод содержал слово «Копировать», но не был предназначен для возвратассылка на владельца.

...