Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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
Ios NSPointerFunctionsCoyIn混乱_Ios_Objective C - Fatal编程技术网

Ios NSPointerFunctionsCoyIn混乱

Ios NSPointerFunctionsCoyIn混乱,ios,objective-c,Ios,Objective C,我试图将NSDate对象添加到配置了(NSPointerFunctionsCopyIn)选项的NSPointerArray: 但正如我所知,使用“NSPointerFunctionsCopyIn”,指针数组中的对象应该是一个新副本,而不是共享对象。如中所述 , NSPointerFunctionsCopyIn选项使用 n复制协议。这并不一定意味着创建了新对象 对于不可变对象(例如NSDate),可以通过保留 复制原始文件,而不是创建新副本。这就是发生的事情 就你而言: NSDate *today

我试图将
NSDate
对象添加到配置了(
NSPointerFunctionsCopyIn
)选项的
NSPointerArray

但正如我所知,使用“NSPointerFunctionsCopyIn”,指针数组中的对象应该是一个新副本,而不是共享对象。

如中所述 ,
NSPointerFunctionsCopyIn
选项使用
n复制
协议。这并不一定意味着创建了新对象

对于不可变对象(例如
NSDate
),可以通过保留 复制原始文件,而不是创建新副本。这就是发生的事情 就你而言:

NSDate *today = [NSDate date];
NSDate *today2 = [today copy];

NSLog(@"%p %p", today, today2);
// Output: 0x1001040f0 0x1001040f0
如中所述 ,
NSPointerFunctionsCopyIn
选项使用
n复制
协议。这并不一定意味着创建了新对象

对于不可变对象(例如
NSDate
),可以通过保留 复制原始文件,而不是创建新副本。这就是发生的事情 就你而言:

NSDate *today = [NSDate date];
NSDate *today2 = [today copy];

NSLog(@"%p %p", today, today2);
// Output: 0x1001040f0 0x1001040f0

在这种情况下,“NSPointerFunctionsStrongMemory”和“NSPointerFunctionsCopyIn”之间有什么区别,因为它们都将保留新添加的对象?据我所知,这些选项彼此独立。“NSPointerFunctionsStrongMemory”是一个“内存选项”,意味着(与默认的“NSPointerFunctionsObjectPersonality”关联)该对象将被保留。“NSPointerFunctionsCoyIn”导致对对象调用
copyWithZone
copyWithZone
可能会返回一个新对象,或者只是保留传递的对象(请参阅NSCopying协议文档)。如果您使用NSMutableString测试代码,您将得到一个不同的对象。@user3061088:您到底担心什么?NSDate对象不能被改变,所以不管你是得到一个指向原始对象的指针,还是一个指向新对象的指针。我明白了,如果我添加一个可变对象,它将创建一个新对象,但如果我添加一个不可变对象,它将保留旧对象,thanx Budd在这种情况下,“NSPointerFunctionsStrongMemory”之间的区别是什么和“NSPointerFunctionsCopyIn”,因为它们都将保留新添加的对象?据我所知,这些选项彼此独立。“NSPointerFunctionsStrongMemory”是一个“内存选项”,意味着(与默认的“NSPointerFunctionsObjectPersonality”关联)该对象将被保留。“NSPointerFunctionsCoyIn”导致对对象调用
copyWithZone
copyWithZone
可能会返回一个新对象,或者只是保留传递的对象(请参阅NSCopying协议文档)。如果您使用NSMutableString测试代码,您将得到一个不同的对象。@user3061088:您到底担心什么?NSDate对象不能进行变异,因此无论您是获得指向原始对象的指针,还是指向新对象的指针,这都无关紧要。我明白了,如果添加可变对象,它将创建新对象,但如果添加不可变对象,它将保留旧对象,thanx buddy