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