Objective c 使用NSFetchedResultsController的NSError对象

Objective c 使用NSFetchedResultsController的NSError对象,objective-c,coding-style,nsfetchedresultscontroller,nserror,Objective C,Coding Style,Nsfetchedresultscontroller,Nserror,这是一个简单的例子:每次在我的NSFetchedResultsController上执行提取时,我当前都在创建一个新的NSError对象。这在许多方法中都会发生,因此目前在我的主视图控制器中有九种方法。我应该创建一个NSError作为属性并使用它,还是更习惯于每次使用它时创建一个新的 我猜创建多个错误的好处是,如果发生了多个错误,您可以分别处理这两个错误,但如果不太可能发生这种情况,那么对所有performFetch调用使用共享一个是否可以接受?我正在学习许多编程惯例和技术,如果这不是什么问题,

这是一个简单的例子:每次在我的
NSFetchedResultsController
上执行提取时,我当前都在创建一个新的
NSError
对象。这在许多方法中都会发生,因此目前在我的主视图控制器中有九种方法。我应该创建一个
NSError
作为属性并使用它,还是更习惯于每次使用它时创建一个新的


我猜创建多个错误的好处是,如果发生了多个错误,您可以分别处理这两个错误,但如果不太可能发生这种情况,那么对所有
performFetch
调用使用共享一个是否可以接受?我正在学习许多编程惯例和技术,如果这不是什么问题,我很抱歉,我只是想得到一些关于在各种地方使用
NSError
对象的更典型方法的反馈。

在堆栈上声明一个对象并传递它的地址实际上是免费的。所以你可以做:

NSError *errorA;

// do something, passing &errorA
if (!errorA) {
    // do something passing &errorA again
}
或者,几乎不需要任何额外的成本(只是堆栈上的另一个指针)


这里不需要担心NSError的分配。它应该更多地关注第一个操作成功与执行第二个操作之间的依赖逻辑。

您并不是在真正创建
NSError
对象。您正在声明对
NSError
对象的引用,然后将引用传递给一个方法,该方法可能会将引用指向它创建的
NSError
对象

NSError *err; // just a reference, no object created
// this creates an object, but you don't do this
err = [NSError errorWithDomain:@"foo" code:0 userInfo:nil];

// You do this.... 
BOOL success = [fetchedResultsController performFetch:&err];
区别在于,您并不是真正创建了一组需要开销的对象。因此,如果对所有变量重复使用相同的变量,或者为每个变量创建一个新变量,则不会影响性能

所以要回答这个问题。。。可以使用1个变量,也可以使用您认为合适的多个变量。某些代码可能会因任何错误而失败并拒绝继续,因此1个错误就可以了。其他代码可能希望继续尝试,这样您就可以保留所有错误,并在最后将它们吐出来。这是一个什么最适合您当时正在进行的特定编码的问题

NSError *err; // just a reference, no object created
// this creates an object, but you don't do this
err = [NSError errorWithDomain:@"foo" code:0 userInfo:nil];

// You do this.... 
BOOL success = [fetchedResultsController performFetch:&err];