2011-03-15 5 views
4

객체 ABMultiValueRef, 정적 분석기 포인트 다음 코드에서 누출 :이 기능을 사용할 때마다릴리스는 내 응용 프로그램에서

ABMultiValueRef phone = (NSString *)ABRecordCopyValue(person, kABPersonPhoneProperty); 
NSString *mobilephone= (NSString*)ABMultiValueCopyValueAtIndex (phone,0); 

마찬가지로 그것은 내가 [phone release]; 방법으로 그것을 풀어하려고

누출 포인트 ABRecordCopyValue , 그러나 컴파일러 경고 "잘못된 수신기 유형 'abmultivalueref'"가져 오는 중입니다. 이것을 공개하는 적절한 방법은 무엇입니까?

답변

5

입니다. 주소록 메서드는 일반적으로 핵심 기반 (CF) 개체를 반환합니다. 이 물체는 수신자 부담으로 연결되어 있으므로 NS 유형과 호환하여 사용할 수 있습니다.

핵심 기초 개체를 사용할 때 이름에 'copy'가있는 메서드는 나중에 CFRelease을 사용하여 해제해야하는 개체를 반환합니다. NS에 해당하는 경우에만 - release을 사용할 수 있습니다.

그래서 코드는 다음 중 하나를 같이 쓸 수있다 :

ABMultiValueRef phone = ABRecordCopyValue(person, kABPersonPhoneProperty); 
NSString *mobilephone = (NSString *)ABMultiValueCopyValueAtIndex(phone, 0); 

// other code 

[mobilephone release]; 

또는

ABMultiValueRef phone = ABRecordCopyValue(person, kABPersonPhoneProperty); 
CFStringRef mobilephone = ABMultiValueCopyValueAtIndex(phone, 0); 

// other code 

CFRelease(mobilephone); 
1

CFRelease(phone);으로 해 보셨습니까? ABMultiValueCopyValueAtIndex가있는 NSString하지
때문에, 당신이 CF 데이터 유형으로 NS 데이터 유형을 혼동하는 것이 보이는 CFStringRef

1

__bridge_transfer는 ARC 당신을 위해 객체를 발표 할 예정 보장 사용. __bridge을 사용하면 반환 된 개체를 수동으로 릴리스해야 함을 의미합니다.