iOS7和之前的不同NSData initWithData分配行为

时间:2013-09-13 14:36:40

标签: objective-c

我有以下语法:

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行为正确?

Apple Library说:

  

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

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

1 个答案:

答案 0 :(得分:1)

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

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