DevPrep

Все темы › Objective-C

В каких случаях лучше использовать copy для NSString? Почему?

Middle PRO

Суть

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

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store