让方法编辑参数而不是在类别中是否安全。
例如,在ViewController子类中只有这样的方法:
-(void)editArray:(NSMutableArray*)array
{
[array removeLastObject];
}
在视图控制器中调用[self editArray:(someArray)];
,其中someArray是一个强大的原子属性。它似乎在我测试时起作用,我只是不知道这是否气馁。我知道我可以轻松地在一个类别中做到这一点,我只是想知道这样的事情是否安全。
答案 0 :(得分:0)
这是安全的,只要您不修改引用,只需修改参数对象的内容即可。例如。在方法内部分配array
不起作用,您需要通过引用传递它。关于样式,请考虑如何从许多Cocoa Touch框架方法返回错误:
NSError *error = nil;
[NSFileManager defaultManager] removeItemAtPath:filePath error:&error];
此处,参数对象(在本例中为&error
)也在方法内部进行了修改。所以我认为你从风格的角度来看也很好:)
答案 1 :(得分:0)
如果在变异时更改数组,Cocoa将抛出异常*** Collection <__NSArrayM: 0x7f96432004c0> was mutated while being enumerated.
考虑代码:
NSMutableArray* a = [[NSMutableArray alloc] initWithArray:@[@"a", @"b", @"c"]];
for (id x in a) {
[a removeLastObject];
}
在这种情况下,它会不安全并导致您的应用程序崩溃。将removeLastObject消息抽象为另一个消息并没有真正改变任何内容。
如果在后台线程上完成也不安全。