System sound를 사용할 경우...
App에서 system sound를 하나만 사용하면 상관 없으나 여러개를 자주 사용 할 경우에는 바로바로 resource를 해제 시켜줘야 memory 낭비를 막을 수 있다.
즉, app이 종료될 때 알아서 resource를 해제시키지만 app이 실행 되는 중에는 resource가 계속 생기므로 실시간으로 해제를 해줘야 한다는 것...(이해한 바로는)
따라서 call back 함수를 등록해 두고 재생이 끝나면 바로 해제를 시켜준다.
방법은 AudioServicesAddSystemSoundCompletion 를 통해 call back 을 등록하고
call back 내부에서
AudioServicesRemoveSystemSoundCompletion 와 AudioServicesDisposeSystemSoundID를 호출해준다(순서를 바꾸면 안됨)
call back의 이름은 상관없으나 인자형식은 유지해야 하는 듯 하다.(SystemSoundID, void*)
자세한 내용은 AudioServicesAddSystemSoundCompletion의 reference를 참고.
/**
*
* System Sound call back method
*/
static void completionCallback(SystemSoundID soundID, void* mySelf)
{
AudioServicesRemoveSystemSoundCompletion(soundID); // 순서 주의!
AudioServicesDisposeSystemSoundID(soundID);
}
NSString *path = [[NSBundle mainBundle]pathForResource:effectName ofType:file];
NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, completionCallback, NULL); // 종료 call back 등록
AudioServicesPlaySystemSound(soundID);
'iOS' 카테고리의 다른 글
인엡 재구매 복구 로직(restore button) (0) | 2012.10.23 |
---|---|
IOS 기반 어플 효과음 재생 (0) | 2012.10.22 |
NSNotification을 이용하여 모든 Modal View를 dismiss 하는 방법 (1) | 2012.10.22 |
table view 2개 사용하기 (0) | 2012.10.18 |
Mime Types (1) | 2012.10.05 |