gpt4 book ai didi

iphone - 在 Objective-c 中,如果结构没有初始化,它的成员返回什么值?

转载 作者:可可西里 更新时间:2023-11-01 06:23:36 26 4
gpt4 key购买 nike

我想知道 View 的高度。

NSInteger height = view.frame.size.height;

上面代码中,framesize是结构,view是对象。
如果上面代码中view为nil,height返回什么值?

我知道如果我向 nil 对象发送消息,我会得到 nil。
但是 size 不是对象。

当我运行上面的代码时,如果 view 为 nil,我得到 0。
它总是返回 0,还是不能保证返回 0?

同样在以下代码中,高度返回零。

CGSize size;
NSInteger height = size.height;

在 Objective-C 中,未初始化的结构总是返回零?

最佳答案

在您的第一个示例 (view.frame.size.height) 中,如果 view 为 nil,您一定会得到 0。这在 Xcode 4.2 中成为现实(使用 clang);对于较旧的编译器版本(我相信还有 gcc),结果是未定义的。来源:Greg Parker's blog .

对于您的第二个示例,它取决于声明 CGSize size; 的位置。如果是这样的局部变量:

- (void)someMethod {
CGSize size;
NSInteger height = size.height;
...
}

那么 height 是未定义的。它可能是零,也可能是任何其他数字。

如果是这样的实例变量:

@implementation MyObject {
CGSize size;
}

那么保证通过+[MyObject alloc]初始化为0。

如果是这样的全局变量:

// outside of any method, function, or class variable section
CGSize size;

(或静态变量)然后保证在您的应用启动时将其初始化为零。

关于iphone - 在 Objective-c 中,如果结构没有初始化,它的成员返回什么值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12434897/

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