Да, поскольку, поскольку вы не указали квалификатор владения, компилятор LLVM делает вывод, что exampleString
имеет __strong
квалификацию владения.
Это означает, что, установив exampleString
в nil
в dealloc
, вы сохраняете nil
(новое значение), которое ничего не делает, и освобождаете старое значение.
Источник
Согласно разделу 4.4.3. Аргументы шаблона из документации LLVM по автоматическому подсчету ссылок (ARC) Objective-C , "Если аргумент шаблона для параметра типа шаблона является типом сохраняемого владельца объекта, который не имеет явного квалификатора владения" , он настроен на __strong
квалификацию. "
И, согласно п. 4.2. Семантика , "Для объектов __strong
сначала сохраняется новый pointee; во-вторых, lvalue загружается примитивной семантикой; в-третьих, новый pointee сохраняется в lvalue с примитивной семантикой; и, наконец, старый pointee является выпущено. Это не выполняется атомарно; для обеспечения безопасности при одновременной загрузке и хранении должна использоваться внешняя синхронизация.