AudioServicesCreateSystemSoundID和Memory Address Argument - 如何传入属性?

时间:2014-01-27 17:58:36

标签: ios objective-c audio

我有一个方法AudioServicesCreateSystemSoundID,根据文档似乎需要传入的内存地址(* outSystemSoundID)。

来自Apple的网站......

OSStatus AudioServicesCreateSystemSoundID (
   CFURLRef       inFileURL,
   SystemSoundID  *outSystemSoundID
);

我有这个代码,当我在方法中创建一个本地对象时。该对象已正确分配给内存位置。

这将返回myTest,代码为:0(这就是我想要的)

 SystemSoundID thisSoundID;

 SystemSoundID myTest = AudioServicesCreateSystemSoundID
 (
 (__bridge CFURLRef)(url), &thisSoundID
 );

但这就是我想要做的。 (self.theSound我已经设置为SystemSoundID属性)。

这将返回myTest,错误代码为:4294967246(我不想要这个)

SystemSoundID myTest = AudioServicesCreateSystemSoundID
(
    (__bridge CFURLRef)(url), self.theSound
);

1 个答案:

答案 0 :(得分:1)

编译器将self.theSound转换为

[self theSound]

其中-(SystemSoundID)theSound是(自动合成的)getter方法 你的属性(默认情况下)获取_theSound实例的值 变量

因此您无法获取“属性的地址”并将其传递给函数。 你可以传递实例变量的地址:

SystemSoundID myTest = AudioServicesCreateSystemSoundID
(
    (__bridge CFURLRef)(url), &self->_theSound
);

绕过属性访问者。但我建议暂时使用 变量而不是:

 SystemSoundID thisSoundID;
 SystemSoundID myTest = AudioServicesCreateSystemSoundID
 (
     (__bridge CFURLRef)(url), &thisSoundID
 );
 self.theSound = thisSoundID;