ope*_*rog 8 iphone pointers objective-c
示例:-save:方法NSManagedObjectContext声明如下:
- (BOOL)save:(NSError **)error
Run Code Online (Sandbox Code Playgroud)
由于NSError已经是一个类,并且传递一个指针实际上会在实现中修改这个对象的效果,-save:这里将指针传递给指针有什么意义呢?什么是优势/感觉?
用法示例:
NSError *error;
if (![managedObjectContext save:&error]) {
// Handle the error.
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*eer 16
如果你只是传入一个指针,那么所有方法都可以改变你指向的已经存在的NSError对象.
通过传入指向指针的指针,它可以创建新的NSError对象,并为您指向指向它们的指针.
Dar*_*ren 13
有些人称之为"out"参数.
您没有传递指向NSError对象的指针,而是将指针传递给局部变量.这使被调用方法能够修改局部变量; 在这种情况下,将其分配给NSError实例.
也许令人困惑的是,您传递给的局部变量save:本身就是一个指针,因此变量类型最终成为指向指针的指针.
底线,它是一个指向局部变量的指针,无论局部变量是一个int还是一个,它都是一样的NSError*.
@Anon是对的.我将补充:这是产生错误的Cocoa方法,而不是抛出异常.
在您的示例中,您有:
NSError *error = nil;
if (![managedObjectContext save:&error]) {
// Handle the error.
}
Run Code Online (Sandbox Code Playgroud)
在调用之后save:,如果出现错误,该save:方法将立即创建一个新NSError对象,并将您的error变量更改为指向nil新的错误对象.这样您就可以NSError自己检查对象并对其做出适当的响应.
IMO,这比抛出异常更清晰(在我的哲学中,只有在发生灾难性和不可恢复的事情时才应该这样做).
| 归档时间: |
|
| 查看次数: |
3617 次 |
| 最近记录: |