iOS2012. 10. 22. 15:15

System sound를 사용할 경우...

App에서 system sound를 하나만 사용하면 상관 없으나 여러개를 자주 사용 할 경우에는 바로바로 resource를 해제 시켜줘야 memory 낭비를 막을 수 있다.

즉, app이 종료될 때 알아서 resource를 해제시키지만 app이 실행 되는 중에는 resource가 계속 생기므로 실시간으로 해제를 해줘야 한다는 것...(이해한 바로는)

따라서 call back 함수를 등록해 두고 재생이 끝나면 바로 해제를 시켜준다.
방법은  AudioServicesAddSystemSoundCompletion 를 통해 call back 을 등록하고
call back 내부에서 
AudioServicesRemoveSystemSoundCompletion 와 AudioServicesDisposeSystemSoundID를 호출해준다(순서를 바꾸면 안됨)
call back의 이름은 상관없으나 인자형식은 유지해야 하는 듯 하다.(SystemSoundIDvoid*)
자세한 내용은 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 allocinitFileURLWithPath:path];

SystemSoundID soundID;

AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);

AudioServicesAddSystemSoundCompletion(soundID, NULLNULLcompletionCallbackNULL);   // 종료 call back 등록

AudioServicesPlaySystemSound(soundID);

Posted by 다오나무