찾다

 >  Q&A  >  본문

ios - 使用typedef 属性出现Pointer is missing a nullability type specific 的警告

  1. 描述你的问题

Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)

警告如上
程序运行正常,全部加上__nonnull 就好了,为什么?

  1. 贴上相关代码

typedef void (^completionHandlerBlock)(NSURL * _Nullable localfile, NSURLResponse * _Nullable response, NSError * _Nullable error);
//NS_ASSUME_NONNULL_BEGIN
@interface DownLoadImages : NSObject

@property (nonatomic, strong) NSURL *imageURL;

- (instancetype)initWithURL:(NSURL *)contentURL;
- (void)startDownloadingImage:(completionHandlerBlock)completionHandler;
@end

.h文件

  1. 贴上相关截图

  2. 已经尝试过哪些方法仍然没解决(附上相关链接)
    //NS_ASSUME_NONNULL_BEGIN

//NS_ASSUME_NONNULL_END
使用这个只能消除属性警告

PHPzPHPz2887일 전872

모든 응답(2)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-17 17:32:11

    typedef에는 문제가 되지 않습니다. 정의한 블록에 _Nullable 키워드가 나타나기 때문입니다. 제거하면 경고가 보고되지 않습니다.

    으아악

    두 가지 해결 방법이 있습니다.

    1. _Nullable 키워드를 삭제하세요. 어쨌든 기본값은 nullable이므로 제거해도 문제가 되지 않습니다.

    2. 부지런히 _Nullable 키워드를 유지한 다음 경고를 보고하는 각 속성과 매개변수에 _Nonnull, _Nullable_Null_unspecified를 추가하세요.
      말씀하신 대로 모든 항목에 __nonnull을 추가하는 것은 안전하지 않습니다. 확인할 시간이 없다면 속성이 null일 가능성이 있는지 여부에 따라 null이 아닌 추가 여부를 선택하는 것이 가장 좋습니다. 하나씩, _Null_unspecified 전체가 아닌 __nonnull 전체를 추가해야 합니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 17:32:11

    이것은 xcode6.3 버전에 추가된 새로운 기능입니다. 이 속성을 사용한다는 것은 클래스의 변수와 메소드의 모든 매개변수를 고려하고 이 속성을 설정해야 한다는 의미입니다.

    회신하다
    0
  • 취소회신하다