Mik*_*nov 16 nullable objective-c init
现在在objective-c中有两个新的注释:nonnull和nullable.
我应该将哪一个用于init方法的返回类型规范?
- (instancetype)init {
if (self = [super init]) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
可空的声音:
有一个"if"来检查[super init]返回什么,并且不能保证它永远不会返回nil.
nonnull的声音:
当init返回nil并且我从不检查它时,我不知道真实的情况.
pka*_*amb 11
-init:返回值:初始化对象,如果由于某些不会导致异常的原因而无法创建对象,则返回nil.
随机类的init方法可以返回nil.如果您[super init]从该类的子类返回结果,则返回的可能性很大nil.您的类应该适当地注释其init方法,就nullable好像它返回可为空的结果一样[super init].
每一个具体的超类对象的init实现必须进行检查,以确定是否该子类的号召,[super init] 可还是不会返回nil反过来.
这表明你的方法的注释应该是nullable,除非你已经证实的结果[super init]会不会是nil.
NSObject,具体为:NSObject类中定义的init()方法不进行初始化; 它只是回归自我.在可空性方面,调用者可以假设init()的NSObject实现不返回nil.
因此对于直接继承的类NSObject,-init可以标记为nonnull.
结果可能[super init]是nonnull,但是你的类的实现init返回nil以响应其他一些条件.
- (instancetype)init {
if (self = [super init]) { // nonnull
if (someFailureCondition) {
return nil; // nullable
}
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您的实现当然应该注释nullable.
| 归档时间: |
|
| 查看次数: |
2314 次 |
| 最近记录: |