示例:-save:
的{{1}}方法声明如下:
NSManagedObjectContext
由于NSError已经是一个类,并且传递一个指针实际上会在- (BOOL)save:(NSError **)error
的实现中修改这个对象的效果,在这里传递一个指向指针的重点是什么?什么是优势/意义?
用法示例:
-save:
答案 0 :(得分:16)
如果你只是传入一个指针,那么所有方法都可以改变你指向的已经存在的NSError对象。
通过传入一个指向指针的指针,它可以创建新的NSError对象,并为您提供一个指向它们的指针。
答案 1 :(得分:13)
有些人称之为“out”参数。
您没有传递指向NSError对象的指针,而是将指针传递给本地变量。这使被调用方法能够修改局部变量;在这种情况下,将其分配给NSError实例。
或许令人困惑的是,您传递给save:
的局部变量本身就是一个指针,因此变量类型最终成为指针的指针。
底线,它是指向局部变量的指针,无论局部变量是int
还是NSError*
,它的工作方式都相同。
答案 2 :(得分:6)
@Anon是对的。我将补充:这是产生错误的Cocoa方法,而不是抛出异常。
在您的示例中,您有:
NSError *error = nil;
if (![managedObjectContext save:&error]) {
// Handle the error.
}
在致电save:
后,如果出现错误,则save:
方法会立即创建新的NSError
对象,并将您的error
变量更改为从nil
指向新的错误对象。这样,您可以自己检查NSError
对象并对其做出适当的响应。
国际海事组织,这比抛出一个例外更清楚(在我的哲学中,只有在发生灾难性和不可恢复的事情时才应该这样做。)
答案 3 :(得分:3)
它允许方法分配一个新的NSError并将指针改为指向它,而不是必须修改已经指向的NSError(如果它不够大会怎么样?)
答案 4 :(得分:3)
优点是您不必创建NSError对象。正如文档所述:
“指向NSError对象的指针。您不需要创建NSError对象。”
答案 5 :(得分:2)
如果你只是传了一个指针,全部 该方法可以改变 已存在的NSError对象 你指的是。
您无法更改NSError对象。
NSError是不可变的。这就是你需要指向NSError变量的原因。您只能创建一个全新的NSError。因此,您将指针更改为指向新创建的NSError。