Обработка плохо аннотированных методов Objective-C?

Прошло некоторое время с тех пор, как я работал с Objective-C (и я новичок в Swift), так что терпите меня. Тем не менее, я заметил несколько "аннотаций обнуляемости", которые либо вообще не имеют смысла, либо полностью противоречат документации Apple. Возьмите следующее NSURL метод класса, например:

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

Вы заметите, что к error параметр, так что следует предположить, что этот метод был аннотирован, верно?

Если это так, то можно также предположить, что, так как relativeToURL Параметр не имеет добавленной аннотации обнуляемости, он не обнуляем.

На самом ли деле я понимаю новые аннотации Nullability Objective-C?

Если да, то почему документация для relativeURL конкретно укажите (жирное форматирование мое):

Чтобы разрешить закладку в области приложения, используйте значение nil.

Я понимаю причину новых аннотаций, но они настолько пострадали от существующих классов, что я не совсем понимаю их пользу. Я что-то пропустил?

1 ответ

Если это говорит _Nonnull, это не может быть ноль. Если он говорит _Nullable, он может. В противном случае, по крайней мере по умолчанию, вы не можете делать какие-либо предположения в любом случае, IIRC.

Другие вопросы по тегам