Short NSString
объекты хранятся непосредственно в своем (тегированном) указателе и не требуют управления памятью. Другие статические строки хранятся в двоичном файле и никогда не могут быть освобождены. Не выделяйте память, поэтому не должны освобождать ее.
NSMutableString
и NSAttributedString
выделяют фактические объекты, поэтому они также должны освобождать их.
Оба поведения являются деталями реализации, и вы не должны полагаться на них. Они не обещаны.
Правило для управления памятью - строгое указание на все, что вам небезразлично, и устраняйте строгое указание, когда оно вам больше не нужно. deinit
должен очищать только память (например, при вызове free
для блоков malloc). Никакая «бизнес-логика» не должна быть в deinit
; нет никакого обещания, что это когда-либо будет бежать. (Например, при обычном завершении программы deinit
пропускается, в отличие от C ++.)