1

自从我使用 Objective-C 以来已经有一段时间了(而且我是 Swift 的新手),所以请耐心等待。但是,我注意到一些“可空性注释”要么根本没有意义,要么与 Apple 的文档完全矛盾。以下面的NSURL类方法为例:

+ (instancetype)URLByResolvingBookmarkData:(NSData *)bookmarkData 
                                   options:(NSURLBookmarkResolutionOptions)options 
                             relativeToURL:(NSURL *)relativeURL 
                       bookmarkDataIsStale:(BOOL *)isStale
                                     error:(NSError * _Nullable *)error;

您会注意到error参数中添加了注释,因此应该假设此方法已被注释,对吗?

如果是这种情况,人们还会假设由于relativeToURL参数没有添加可空性注释,因此它不能为空。

我实际上是否理解 Objective-C 的新可空性注释?

如果是这样,为什么要relativeURL专门说明文档(粗体格式是我的):

要解析应用范围的书签,请使用nil值。

我理解新注释背后的原因,但是它们在现有类中受到了如此大的影响,以至于我不太了解它们的好处。我错过了什么吗?

4

1 回答 1

1

如果它说 _Nonnull,它不能是 nil。如果它说 _Nullable,它可以。否则,至少在默认情况下,您不能做出任何假设,IIRC。

于 2015-12-04T08:51:15.763 回答