- (void)playAlarmSound:(NSTimer *)theTimer {
    static SystemSoundID soundID/* = 0 */; // ?
    if (!soundID) {
        soundID = [Utilities createSystemSoundIDFromFile:@"beep" ofType:@"caf"];
    }
    ...
}

SystemsoundID(uint32)是否自动分配0?还是我应该明确分配它?我必须这样做并测试以查看是否尚未用实用程序方法初始化它,因为如果我只是这样做,它不会编译 static SystemSoundID soundID = [Utilities createSystemSoundIDFromFile:@"beep" ofType:@"caf"];. 。起初,我尝试将其分配给NULL,但后来我意识到它不是指针,所以无论如何,我是否应该有 = 0 在那里还是多余的?

有帮助吗?

解决方案

这个问题不涉及任何Objective-C功能,因此答案是在C标准中找到的。

C99,第6.7.8节,第10款:

如果未明确初始化具有静态存储持续时间的对象,则:

...

- 如果它具有算术类型,则将其初始化为(正或无符号)为零;

UINT32(本身就是UINT32_T)是算术类型。因此,初始化为零。

其他提示

这与类型无关 - 与存储类有关。在C中,静态变量和全局变量自动初始化为0。普通本地(自动)变量不会自动初始化,因此您必须自己执行或包含垃圾。

我相信Objective-C遵循与C相同的规则。

静态变量和全局变量初始化为0,而本地(IE自动)变量未初始化,并且可以从不可预测的值开始。

也就是说,明确将值初始化为0并没有什么伤害。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top