Я думаю, что способ, которым вы реализовали свое решение, мог бы быть лучше, и понимание того, почему это поможет вам учиться.
Во-первых, в Objective-C (по крайней мере, Cocoa и Cocoa Touch) принято именовать переменныеи имена методов, начинающиеся со строчной буквы.Например, ваша переменная "Media" должна быть "media", а ваш метод "PlaySound" должен быть "playSound".
Во-вторых, ваша переменная "media" объявлена как глобальная переменная, и было бы лучшеобъявите его как переменную экземпляра в @interface
в вашем файле MyViewController.h.Таким образом, каждый экземпляр MyViewController
будет иметь переменную экземпляра, называемую «media», которая лучше соответствует объектно-ориентированной концепции инкапсуляции.Лично я бы назвал переменную «player», потому что мне кажется, что она описывает, какая переменная лучше (с этого момента я буду использовать «player»).
В-третьих, если ваш «playSound»всегда собираясь воспроизводить тот же звук, что и у вас, может быть лучше перенести выделение объекта «media» на метод «init ...» (например, initWithNibName: bundle: method).Таким образом, вы создаете экземпляр объекта только один раз, а не каждый раз, когда вызывается ваш метод playSound (я предполагаю, что он может вызываться несколько раз).Ваш метод "playSound" должен был бы вызвать только [player play]
.Таким образом, на самом деле нет никакой причины иметь ваш путь в качестве переменной экземпляра.
Наконец, если вы делаете вещи, как описано выше, тогда имеет смысл вызывать [player release] в методе dealloc.Метод dealloc вызывается, когда экземпляр класса освобождается, и он освобождает принадлежащий ему экземпляр «player».
Вот как будут выглядеть мои изменения.
MyViewController.h
#import <UIKit/UIKit.h>
@class AVAudioPlayer;
@interface MyViewController : UIViewController
{
AVAudioPlayer *player;
}
- (IBAction)playSound;
@end
MyViewController.m
#import <AVFoundation/AVAudioPlayer.h>
#import "MyViewController.h"
@implementation MyViewController
- (id)initWithNibName:(NSString*)nibName bundle:(NSBundle*)nibBundleOrNil
{
if (self = [super initWithNibName:nibName bundle:nibBundleOrNil]) {
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Sound" ofType:@"wav"];
player = [AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:filePath] error:NULL];
}
return self;
}
- (IBAction)playSound
{
[player play];
}
- (void)dealloc
{
[player release];
[super dealloc];
}
@end