提问人:opencai 提问时间:2/1/2021 最后编辑:koenopencai 更新时间:2/2/2021 访问量:227
为什么 alloc 返回 nil?( Objective-C )
Why alloc return nil? ( Objective-C )
问:
我正在将 iOS opengl 游戏移植到 metal 上
使用 metalangle https://github.com/kakashidinho/metalangle
我使用预编译的动态库
创建 MGLContext 时返回 nil
MGLContext * aaa = [MGLContext alloc];
aaa == nil
为什么?
我以为只有当内存溢出时,alloc 才会返回 nil
答:
1赞
Rob Napier
2/1/2021
#1
在现代 ObjC 中,仅调用而不调用 init 方法并没有明确定义:+alloc
您必须使用 init...方法完成初始化过程。例如:
TheClass *newObject = [[TheClass alloc] init];
这从来都不是一个好的做法,但你现在不能拆分分配和初始化。
也就是说,你是如何测试的?到目前为止,我还无法重现它。本身可能是.如果动态库是弱链接的,并且不存在,就会发生这种情况。MGLContext
nil
评论
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
不是 的指定初始值设定项,也不是方便的初始值设定项。它需要根据源代码。(不过,我仍然怀疑这是零,因为链接很弱)MGLContext
initWithAPI:
MGLContext
0赞
Cy-4AH
2/1/2021
@opencai因此,如果原始代码是,那么更有可能由 返回,因为它是错误的初始值设定项。[[MGLContext alloc] init]
nil
init
0赞
Rob Napier
2/1/2021
错误的初始值设定项不会返回 。它只是无法正确设置对象(查看代码,看看它实际做了什么)。 表示该类的某些内容不可用。nil
nil
0赞
Cy-4AH
2/1/2021
@RobNapier可能有代码:?- (instancetype) init { [super init]; return nil; }
0赞
opencai
2/2/2021
#2
这是由“弱链接”引起的问题
谢谢@RobNapier
谢谢大家
评论
[MGLContext class]