2013-01-08 4 views
1

ARC에서 __bridge는 소유권 이전이없는 캐스트만을 의미합니다. 그러나 다음 코드는 충돌하지 않습니다CFStringRef는 __bridge (ARC)와의 강력한 참조가없는 NSString을 보유하고있는 것처럼 보입니다.

int i = 8; 
    NSString* str = [[NSString alloc] initWithFormat:@"abc%d",i]; 
    Employee* e = [Employee newEmployee]; 
    CFStringRef cfStr = (__bridge CFStringRef)(str); 
    str = nil; 
    printf("%s\n",CFStringGetCStringPtr(cfStr, kCFStringEncodingMacRoman)); 

내가 str에하는 전무를 할당 할 때, 문자열은 이상적으로 해제되어야하고 printf와 라인이 중단되어야합니다.

+4

"충돌해야합니다."- 음, ** 충돌이 필요 없습니다. 인스턴스가 할당 해제 된 경우에도 작동 할 수 있습니다. –

+1

메모리가 아직 재사용되지 않았습니다. malloc 낙서 또는 경비원을 켜면 충돌이 발생합니다. –

+1

유사 : [내 개체가 무수히 많은 작업 후에도 계속 작동하는 이유는 무엇입니까?] (http://stackoverflow.com/questions/6646947/why-my-object-still-work-after-countless-of-release/6647237#6647237) , [할당 취소 된 개체로 메시지 보내기가 작동 중입니다!] (http://stackoverflow.com/questions/1575819/objective-c-send-message-to-deallocated-object-is-working-why?rq=1) –

답변

1

조쉬의 코멘트를 인용 : "메모리가 아직 재사용되지 않았습니다 .Malloc 낙서 또는 경비원을 켜면 추락 할 것입니다."