CFNumber를 예제로 사용하기 때문에 어떤 유형이든 무료 펀드가 없습니다. 카운트가 2입니다 매우 이상하다하지만 CFNumberRef
를 사용하는 경우, 카운트가 그것은하지 않는 arc
보인다 1입니다ARC에서 __attribute __ ((NSObject))를 사용하는 올바른 방법은 무엇입니까?
typedef __attribute__((NSObject)) CFNumberRef MYNumberRef;
int main(int argc, const char * argv[])
{
@autoreleasepool {
MYNumberRef ptr = NULL;
double myDouble = 10.1;
ptr = CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &myDouble);
CFIndex count = CFGetRetainCount(ptr);
}
return 0;
}
:
는난 그냥 이런 몇 가지 테스트 코드를 작성 CFType
이름 규칙을 고려하면 반환 값은 retain
입니다.
그래서 __attribute__((NSObject))
을 사용하여 CFType
속성을 선언하십시오. This post는 you shouldn't have to explicitly nil them out in dealloc.
말했다하지만 이런 식으로 사용하는 경우 :
@property (strong, nonatomic, readwrite) __attribute__((NSObject)) CFNumberRef number;
다음 :
나는dealloc
방법을 공개하지 않는 경우에는 메모리 누수가 없습니다
self.number = CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &myDouble);
? 어쩌면 이것을 다음과 같이 사용해야합니다 :
CFNumbeRef ref = CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &myDouble);
self.number = ref;
CFRelease(ref);
Apple이 이에 대해 언급합니까?
'NSNumber'로 전송 캐스트를 연결할 수 없습니까? –
@ BryanChen, 저는 CFNumber를 예제로 사용하고 있습니다. 따라서 어떤 유형이라도 Fundation 수신자 부담 전화 부분이 없어도됩니다! – Karl
좋아요. 첫째,'@ autoreleasepool' 내에 retain count는 쓸모가 없습니다. 둘째, Instrument를 사용하여 메모리 누수 여부를 테스트하십시오. –