NSError对象与NSFetchedResultsControllers

时间:2013-03-26 18:11:39

标签: objective-c coding-style nsfetchedresultscontroller nserror

这很简单:我每次在NSError上执行抓取时,我正在创建一个新的NSFetchedResultsController对象。这在多种方法中都会出现,因此目前我的主视图控制器中有九种。我应该创建一个NSError作为属性并使用它,或者每次使用它时是否更常规地接受创建新属性?

我猜测创建倍数的优势在于,如果出现多个错误,您可以独立获得两个错误,但如果不太可能发生这种错误,那么为所有{{1}使用共享错误是否可以接受电话?我正在学习很多编程约定和技术,所以如果这是一个非问题的道歉,我只想得到一些关于在各种中使用performFetch对象的更典型方法的反馈。地方。

2 个答案:

答案 0 :(得分:1)

只需在堆栈上声明一个并传递它的地址几乎是免费的。所以你可以这样做:

NSError *errorA;

// do something, passing &errorA
if (!errorA) {
    // do something passing &errorA again
}

或者,几乎没有任何额外费用(只是堆栈上的另一个指针)

NSError *errorA, *errorB;

// do something, passing &errorA
// do something, passing &errorB, that doesn't care whether the last thing succeeded

if (!errorA && !errorB) {
    // do something else
}

这里没有必要担心NSError的分配。它应该更多地关注第一个动作成功与第二个动作之间的依赖逻辑。

答案 1 :(得分:1)

您并未真正创建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错误就可以了。其他代码可能想尝试并继续前进,以便您保留所有错误并在最后将它们喷出。这是与您当时正在处理的特定编码最合适的问题。