Что делает Mutable Copy в Objective C

В цели C, то же самое для языка C++, если вы назначите объект для объекта, он получит свой указывающий адрес следующим образом:

object1 = object2;

Таким образом, изменение одного из объектов выше повлияет на другой.

Это то же самое для MutableCopy? а в чем разница между копией и MutableCopy?

Как сделать глубокое копирование?

2 ответа

В Objective C есть другая модель управления памятью, чем в C++так что вы не можете просто удалить firstString - вы должны удалить все сильные ссылки на него. В этом случае вы создаете сильную ссылку. Когда вы переназначаете secondString это будет указывать на другой объект. Так NSString неизменен.

Изменяемая копия создает еще один строковый объект, и вы можете изменить его

Да, mutableCopy (и копия) является глубокой копией.

см. следующий тестовый код:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSString *string1 = @"string1";
    NSString *string2 = string1;

    NSLog(@"Test 1(%p, %p): String 1: %@; String 2: %@", string1, string2, string1, string2);

    string1 = nil;

    NSLog(@"Test 2(%p, %p): String 1: %@; String 2: %@", string1, string2, string1, string2);

    string1 = string2;

    NSLog(@"Test 3(%p, %p): String 1: %@; String 2: %@", string1, string2, string1, string2);

    string2 = [string1 mutableCopy];

    NSLog(@"Test 4(%p, %p): String 1: %@; String 2: %@", string1, string2, string1, string2);




}

Это производит следующий вывод. Вы можете видеть, что место в памяти одинаково, когда строка2 назначена на строку1. В тесте 4 после mutableCopy расположение памяти изменяется.

2015-04-30 11:07:30.359 TestStuff[9425:2555886] Test 1(0x103021068, 0x103021068): String 1: string1; String 2: string1
2015-04-30 11:07:30.359 TestStuff[9425:2555886] Test 2(0x0, 0x103021068): String 1: (null); String 2: string1
2015-04-30 11:07:30.359 TestStuff[9425:2555886] Test 3(0x103021068, 0x103021068): String 1: string1; String 2: string1
2015-04-30 11:07:30.359 TestStuff[9425:2555886] Test 4(0x103021068, 0x7f9a23d71b30): String 1: string1; String 2: string1
Другие вопросы по тегам