假设我有这种方法:
- (void)test:(NSData *)data;
在主叫方面,我有这个:
NSMutableData *data = [[NSMutableData alloc] initWithData:someData];
[self test:data];
测试方法中的数据是否变为不可变?如果在测试方法中的数据仍在处理时,如果在调用端更改了数据,它是否会影响测试方法中的数据?
答案 0 :(得分:3)
没有。
test:
可以检查是否[data isKindOfClass:[NSMutableData class]]
并将其转换为一个,但这是一个非常糟糕的主意。 test:
宣称它不会改变传入的对象。
答案 1 :(得分:3)
测试方法中的数据是否变为不可变?
我同意这个问题的答案是否定的。我也同意'邪恶'实施可以弄明白 可变并改变数据。
如果在测试方法中的数据仍处理时,如果在调用方面更改了数据,它是否会影响测试方法中的数据?
我相信,这个问题的答案是是。此方法的调用者知道data
是NSMutableData
。如果test:
方法是异步的,或者调用者在调用data
之前将test:
传递给另一个异步方法,则在data
执行时可以更改test
。< / p>
答案 2 :(得分:2)
没有。如果方法是将data
参数转换为NSMutableData
,则可以编辑数据。如果你想确保data
是不可变的,你应该这样做:
[self test:[data copy]];