描述你的问题
Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)
警告如上
程序运行正常,全部加上__nonnull 就好了,为什么?
贴上相关代码
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文件
贴上相关截图
已经尝试过哪些方法仍然没解决(附上相关链接)
//NS_ASSUME_NONNULL_BEGIN
//NS_ASSUME_NONNULL_END
使用这个只能消除属性警告
으아악typedef
에는 문제가 되지 않습니다. 정의한 블록에_Nullable
키워드가 나타나기 때문입니다. 제거하면 경고가 보고되지 않습니다.두 가지 해결 방법이 있습니다.
_Nullable
키워드를 삭제하세요. 어쨌든 기본값은 nullable이므로 제거해도 문제가 되지 않습니다.부지런히
_Nullable
키워드를 유지한 다음 경고를 보고하는 각 속성과 매개변수에_Nonnull
,_Nullable
및_Null_unspecified
를 추가하세요.말씀하신 대로 모든 항목에 __nonnull을 추가하는 것은 안전하지 않습니다. 확인할 시간이 없다면 속성이 null일 가능성이 있는지 여부에 따라 null이 아닌 추가 여부를 선택하는 것이 가장 좋습니다. 하나씩,
_Null_unspecified
전체가 아닌__nonnull
전체를 추가해야 합니다.이것은 xcode6.3 버전에 추가된 새로운 기능입니다. 이 속성을 사용한다는 것은 클래스의 변수와 메소드의 모든 매개변수를 고려하고 이 속성을 설정해야 한다는 의미입니다.