0

我有以下语法:

UTF16Char buffer[16];
for(int i = 0; i < 16; i++){
    buffer[i] = ' ';
}

NSData *data1 = [[NSData alloc] initWithBytes: buffer length : sizeof(UTF16Char) * 16 ];
NSData *data2 = [[NSData alloc] initWithData: data1];

BOOL sameSrc = data1bytes == data2.bytes;
NSLog ( @"Equals: %d" , sameSrc);

在 iOS6 中 *date1 和 *date2 表示两个不同的地址,但在 iOS7 中指向同一个地址。这种行为是预期的并且initWithData行为正确吗?

苹果图书馆 说:

使用内容数据初始化的数据对象。返回的对象可能与原始接收者不同。

所以我假设数据是从 date1 复制来初始化 date2 对象的。那是对的吗?

4

1 回答 1

1

这听起来像是完全有效的行为。文档确实说可能会有所不同。iOS 5 和 6 都符合这个定义。

(我的猜测是,如果data1data2是可变的,那么地址会有所不同,否则它们将是相同的。如果值是不可变的,那么复制的值是什么?)

于 2013-09-13T14:41:21.630 回答