在我读过的大多数 Objective-C 示例中,以及在 Objective-C 文档中,对象总是在使用前检查是否成功完成。
例如:
MyObject *myObject = [[MyObject alloc] init];
if (myObject){
//do stuff with the object
}
//stuff beyond here is probably not going to work if myObject is nil
这不会使追踪错误变得困难吗?我不确定除了内存不足之外分配会失败的原因,但我从未见过在初始化对象后立即在 Java(我从中迁移的语言)中进行这样的检查。
我想如果你检查每一个分配并试图对失败的分配做出反应,它会使应用程序非常复杂。我猜你可以在很多情况下向用户显示错误消息,但程序中的分支数量可能会翻倍。
但是在我看到的示例中,当分配失败时,它们什么也不做,除了跳过一些用户在屏幕上看到他们期望的内容所必需的代码。看起来如果分配失败在实践中真的发生了很多,并且您遵循这种编码风格,结果将是空白屏幕,用户认为已保存的未保存文档,用户和程序员不知道的损坏数据,等等
编辑:这是 Apple 教程“您的第三个 iOS 应用程序:iCloud”中的一个示例。
- (NSMetadataQuery*)textDocumentQuery {
NSMetadataQuery* aQuery = [[NSMetadataQuery alloc] init];
if (aQuery) {
// Search the Documents subdirectory only.
[aQuery setSearchScopes:[NSArray
arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];
// Add a predicate for finding the documents.
NSString* filePattern = [NSString stringWithFormat:@"*.%@",
STEDocFilenameExtension];
[aQuery setPredicate:[NSPredicate predicateWithFormat:@"%K LIKE %@",
NSMetadataItemFSNameKey, filePattern]];
}
return aQuery;
}