ios - 尝试了解iOS开发中的AVAudioPlayer

标签 ios c

我是 iOS 开发新手,想知道是否有人可以帮助我理解为什么这样做? @synthesize 有什么作用?

在 .h 中

@property (strong, nonatomic) AVAudioPlayer *player;

以 .m 为单位

@synthesize player;

-(void)startMusic{
    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"audio" ofType:@"m4a"];
    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
    player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
    player.numberOfLoops = -1; //infinite
    [player play];
}

最佳答案

在面向对象编程中,有一些方法或函数,称为 setter 和 getter。 setter 为某个变量设置数据。 getter 本质上是数据的 getter。使用 Objective-C 和 iOS,您不必为正在处理的变量提供 setter 和 getter。 @synthesize 关键字会自动创建 setter/getter。使用您的代码的示例

对于您拥有的@property,编译器正在执行以下操作:

-(void)setAVAudioPlayer:(AVAudioPlayer *)player {}
-(AVAudioPlayer *)getAVAudioPlayer { return AVAudioPlayer var;}

这并不完全是编译器将使用的约定,但它只是为了显示 setter/getters 方式来显示 @synthesize 的作用。它就像自动创建 getter/setter。

在您的示例中,它的工作方式是当您为玩家创建属性时,编译器已经将玩家视为一个对象,因此它将其创建为“全局”变量,这意味着您可以在所有内容中使用它.m 文件的位置,而不仅仅是播放声音的位置

希望这有帮助!

关于ios - 尝试了解iOS开发中的AVAudioPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18455780/

相关文章:

ios - 如何将 NSArray 转换为特定的字符串?

ios - UIAlertView 的大小

c - 实时压缩32位RGBA图像数据

c - 为什么输出始终为零(0.0000)?

ios - PDFKit 的 PDFDocument init(url : URL) does not work with HTTPS

ios - 图像颜色错误?

ios - 从 html 链接重定向到 IOS 应用程序

c - 将分配的内存视为不同类型

c - 内存分配 : Why this C program works?

c - 如何在不使用数组和字符串的情况下将小数转换为任何其他基数