В каких случаях лучше использовать copy для NSString? Почему?
Суть
NSString — часть class cluster с мутабельным подклассом NSMutableString. Благодаря полиморфизму в свойство типа NSString * можно присвоить NSMutableString, и если свойство strong, вы храните указатель на чужой изменяемый объект: владелец поменяет строку — изменится и «ваше» значение. copy в сеттере делает неизменяемый снимок, и свойство ведёт себя как значение, а не как ссылка.
#import <Foundation/Foundation.h>
@interface User : NSObject
@property (nonatomic, strong) NSString *nickStrong;
@property (nonatomic, copy) NSString *nickCopy;
@end
@implementation User
@end
static void demo(void) {
NSMutableString *draft = [NSMutableString stringWithString:@"ann"];
User *u = [User new];
u.nickStrong = draft;
u.nickCopy = draft;
[draft appendString:@"_2026"];
NSLog(@"%@ / %@", u.nickStrong, u.nickCopy); // ann_2026 / ann
}
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep