이번에 진행한 프로젝트는 무료음악감상 앱이다. 젠장하라고 내가 회사에서 할당받은 테스트 기기는 iPod iOS 4.3.3..
업그레이드를 할래두 이놈의 iPod 을 제외한 나머지 기기들이 다 업그레이드 된 상태라 업그레이드를 하기도 애매하다..
Xcode4.2 / Base SDK iOS5.1/ Deployment Target iOS3.1
암튼, 앱 기능 중 오디오 재생을 백그라운드 모드에서 재생해야 하는 기능이 있다. 이 기능을 구현하다보니..
콜수신 시 자동으로 재생중인 오디오가 일시정지를 된다. 하지만 앱으로 복귀 시 다시 재생되지 않는다.
이부분을 처리하기 위해서 사용한 클래스가
CTCallCenter 인데..요놈은 iOS 4.0 부터 사용 가능하다 그래서 Deployment Target를 4.0 으로 변경했다.
iOS 4.0 으로 올라오니 블럭 코딩을 해도 무방해지고..
그런데 CTCallCenter 이 좀 이상하다..
@A.m
-(id) init
{
self = [super init];
ctCallCenter = [[CTCallCenter alloc] init];
ctCallCenter.callEventHandler....
return self;
}
@controller source
....
A a = [A alloc] init]; <- 생성.
....
a 의 retainCount는 1이 아닌 2가 나온다..젠장.
CTCallCenter 를 멤버로 가지고있는 객체 A를 생성하고 초기화 메소드 내에서 CTCallCenter를 생성하면 상위(?)객체의 retainCount를 +1해버린다.
아무래도 CTCallCenter 내부적으로 CTCallCenter를 생성시키는 객체를 retain 참조하는 것 같다.
그리고 A의 dealloc 메소드에서 ctCallCenter를 release 해주는데..
A를 사용하는 controller 에서 A를 release 해도 A의 dealloc가 호출되지 않는다..
ctCallCenter 를 생성하면서 retainCount가 1증가 한 상태라 메모리 해제가 되지 않게 되었다..
ARC 가 있는 상황에서 retain / release / autorelease 를 개발자가 직접 처리하다 보니 이것 저것 짜증이 좀 난다.
ARC 를 좀 정리해야 것다.
'Program > iOS' 카테고리의 다른 글
[iOS] 비동기 네트워크 쓰래드 - NetworkThread (1) | 2012.10.19 |
---|---|
iOS 무료음악감상 Audio BackgroundTask (6) | 2012.06.12 |
[iOS] XCode4 Distrubution 만들기. (0) | 2012.02.08 |
Xcode4 - Project Rename (5) | 2012.01.10 |
Mac - Show Finder Hiding File (0) | 2012.01.03 |