1

假设我有这个方法:

- (void)test:(NSData *)data;

在调用方,我有这个:

NSMutableData *data = [[NSMutableData alloc] initWithData:someData];

[self test:data];

测试方法中的数据是否变得不可变?如果在调用端更改了数据,而测试方法内部的数据仍在处理中,是否会影响测试方法内部的数据?

4

3 回答 3

3

不。

test:可以检查是否[data isKindOfClass:[NSMutableData class]]并将其转换为一个,但这是一个非常糟糕的主意。 test:正在宣传它不会改变传入的对象。

于 2013-10-17T14:59:21.233 回答
3

OP实际上有两个问题:

  1. 测试方法中的数据是否变得不可变?

    我同意这个问题的答案是否定的。我也同意一个“邪恶”的实现可以找出它可变的并改变数据。

  2. 如果在调用端更改了数据,而测试方法内部的数据仍在处理中,是否会影响测试方法内部的数据?

    我相信,这个问题的答案是Yes。此方法的调用者知道这data是一个NSMutableData. 如果test:方法是异步的,或者调用者data在调用之前传递给另一个异步方法,test:data可以在test执行时更改。

于 2013-10-17T15:26:33.630 回答
2

不。如果方法是将data参数转换为NSMutableData它可以编辑数据。如果你想确保它data是不可变的,你应该这样做:

[self test:[data copy]];
于 2013-10-17T14:59:05.257 回答