为什么 alloc 返回 nil?( Objective-C )

Why alloc return nil? ( Objective-C )

提问人:opencai 提问时间:2/1/2021 最后编辑:koenopencai 更新时间:2/2/2021 访问量:227

问:

我正在将 iOS opengl 游戏移植到 metal 上

使用 metalangle https://github.com/kakashidinho/metalangle

我使用预编译的动态库

创建 MGLContext 时返回 nil

MGLContext * aaa = [MGLContext alloc];

aaa == nil

为什么?

我以为只有当内存溢出时,alloc 才会返回 nil

objective-c null 动态库 分配

评论

0赞 Warren Burton 2/1/2021
设备和模拟器上都是零吗?
0赞 Cy-4AH 2/1/2021
什么回报?[MGLContext class]

答:

1赞 Rob Napier 2/1/2021 #1

在现代 ObjC 中,仅调用而不调用 init 方法并没有明确定义+alloc

您必须使用 init...方法完成初始化过程。例如:

TheClass *newObject = [[TheClass alloc] init];

这从来都不是一个好的做法,但你现在不能拆分分配和初始化。

也就是说,你是如何测试的?到目前为止,我还无法重现它。本身可能是.如果动态库是弱链接的,并且不存在,就会发生这种情况。MGLContextnil

评论

0赞 opencai 2/1/2021
同意,我简化了问题 原始代码是 MGLContext * context = [[MGLContext alloc] init];我用 NSString 替换了 MGLContext,aaa 不是 nil NSString* aaa= [NSString alloc];aaa != 无
0赞 Rob Napier 2/1/2021
init不是 的指定初始值设定项,也不是方便的初始值设定项。它需要根据源代码。(不过,我仍然怀疑这是零,因为链接很弱)MGLContextinitWithAPI:MGLContext
0赞 Cy-4AH 2/1/2021
@opencai因此,如果原始代码是,那么更有可能由 返回,因为它是错误的初始值设定项。[[MGLContext alloc] init]nilinit
0赞 Rob Napier 2/1/2021
错误的初始值设定项不会返回 。它只是无法正确设置对象(查看代码,看看它实际做了什么)。 表示该类的某些内容不可用。nilnil
0赞 Cy-4AH 2/1/2021
@RobNapier可能有代码:?- (instancetype) init { [super init]; return nil; }
0赞 opencai 2/2/2021 #2

这是由“弱链接”引起的问题

谢谢@RobNapier

谢谢大家

图像1

图片2