Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在作业中何时使用和何时不使用(可变)副本(目标C)_Objective C_Nsmutabledictionary - Fatal编程技术网

Objective c 在作业中何时使用和何时不使用(可变)副本(目标C)

Objective c 在作业中何时使用和何时不使用(可变)副本(目标C),objective-c,nsmutabledictionary,Objective C,Nsmutabledictionary,我对目标C不熟悉,我不知道在NS(可变)词典中,我必须使用(可变)副本来完成这样的作业: dict[@“backup”]=dict[@“myList”] 通过调试,我发现任务必须这样完成: dict[@“backup”]=[dict[@“myList”]可变表复制] 现在的问题是:我如何知道我必须使用副本(vs引用)以及哪种类型的对象 谢谢大家! 这取决于指定元素的使用。如果要更改它的内容,它必须是可变的。如果您只是在阅读它,请不要使它可变。只是它取决于指定元素的使用。如果要更改它的内容,它必须

我对目标C不熟悉,我不知道在NS(可变)词典中,我必须使用
(可变)副本
来完成这样的作业:

dict[@“backup”]=dict[@“myList”]

通过调试,我发现任务必须这样完成:

dict[@“backup”]=[dict[@“myList”]可变表复制]

现在的问题是:我如何知道我必须使用副本(vs引用)以及哪种类型的对象


谢谢大家!

这取决于指定元素的使用。如果要更改它的内容,它必须是可变的。如果您只是在阅读它,请不要使它可变。

只是它取决于指定元素的使用。如果要更改它的内容,它必须是可变的。如果你只是在读它,不要让它变为易变的。

没有什么你必须做的

字典包含键值对。例如,为了使代码正常工作,dict包含一些对象作为键“myList”的值。不知道那是什么东西。你可以做三个不同的作业,每个作业都是完全有效的,但做的事情不同:

dict [@"backup"] = dict [@"myList"];
存储密钥备份下的密钥myList下已经存在的相同对象。如果对象是可变的,并且有人修改了该对象,则每个键下的对象都会被修改,因为它是同一个对象

dict [@"backup"] = [dict [@"myList"] copy];
“复制”很有趣。通常它会创建对象的副本,因此您有两个对象,一个旧对象和一个新对象。如果原始文件是可变的,那么副本将是不可变的。但是,如果原始对象是不可变的,那么操作系统会假定复制没有意义,因此复制将提供原始对象。无论如何,dict[@“backup”]将是一个不可变的对象,不受dict[@“myList”]修改的影响,因为它不是同一个对象,或者因为dict[@“myList”]无法修改

dict [@"backup"] = [dict [@"myList"] mutableCopy];
这将生成原始文件的可变副本并将其存储。这绝对不是同一个对象。它可以被修改

dict [@"backup"] = [dict [@"myList"] mutableCopy];
这真的取决于你想要实现什么。这里没有对错之分

没有什么你必须做的

字典包含键值对。例如,为了使代码正常工作,dict包含一些对象作为键“myList”的值。不知道那是什么东西。你可以做三个不同的作业,每个作业都是完全有效的,但做的事情不同:

dict [@"backup"] = dict [@"myList"];
存储密钥备份下的密钥myList下已经存在的相同对象。如果对象是可变的,并且有人修改了该对象,则每个键下的对象都会被修改,因为它是同一个对象

dict [@"backup"] = [dict [@"myList"] copy];
“复制”很有趣。通常它会创建对象的副本,因此您有两个对象,一个旧对象和一个新对象。如果原始文件是可变的,那么副本将是不可变的。但是,如果原始对象是不可变的,那么操作系统会假定复制没有意义,因此复制将提供原始对象。无论如何,dict[@“backup”]将是一个不可变的对象,不受dict[@“myList”]修改的影响,因为它不是同一个对象,或者因为dict[@“myList”]无法修改

dict [@"backup"] = [dict [@"myList"] mutableCopy];
这将生成原始文件的可变副本并将其存储。这绝对不是同一个对象。它可以被修改

dict [@"backup"] = [dict [@"myList"] mutableCopy];

这真的取决于你想要实现什么。这里没有对错之分

这件事没有什么“必须”的。如果第一句话符合你的意图/期望,那么它就非常好。如果您想要一个单独的对象,您只需要制作一个副本。如果您需要一个独立的对象是可变的,那么您只需要创建一个可变的副本。如果第一句话符合你的意图/期望,那么它就非常好。如果您想要一个单独的对象,您只需要制作一个副本。如果你需要一个独立的对象是可变的,你只需要制作一个可变的副本。非常感谢!来自PHP,赋值实际上是复制,所以我必须习惯显式复制值。非常感谢!来自PHP,赋值实际上是复制,所以我必须习惯显式复制值。