gpt4 book ai didi

ios - `[UIView initWithFrame:]` : nullable or nonnull? 的冲突文档

转载 作者:可可西里 更新时间:2023-11-01 03:55:43 25 4
gpt4 key购买 nike

使用 CLANG_ANALYZER_NONNULL(即 -Xclang nullability),我得到“Null is returned from a function that expected to return a non-null value":

enter image description here

使用 Xcode 7.3 和 iOS 9.3 文档,我检查了 initWithFrame: 并且它可以返回 nil:

description

但是UIView.h用NS_ASSUME_NONNULL_BEGIN封装了所有东西,所以我们可以解释如下:

interface

作为:

- (nonnull instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;

所以文档解释它是nullable,而头文件说它是nonnull。信任哪一个?

我应该写:

- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (!self) {
// workaround for clang analyzer
return (void * _Nonnull)nil;
}
// Initialization code
return self;
}

或者:

- (nonnull instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
// Initialization code
return self;
}

🔴🔴🔴

更新

Xcode 文档已更新,现在: initWithFrame: documentation

所以不再有冲突。

最佳答案

UIView-initWithFrame 初始化器的情况下,建议不要防御性地检查调用 super 初始化器的结果,因为应用程序实际上没有什么可以从失败的 UIView 分配中恢复。

此外,从 Xcode 7.3 beta 4 开始,静态分析器不再在此处发出警告。它现在不会对从 -init-copy-mutableCopy 系列返回 nil 发出警告,即使这些方法具有返回类型使用 nonnull 类型限定符来避免对这种常见的防御性习语发出警告。

关于ios - `[UIView initWithFrame:]` : nullable or nonnull? 的冲突文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35532777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com