2013-01-08 31 views
1

在弧,__bridge應該暗示只是一個沒有所有權轉讓的演員。但是,下面的代碼不會崩潰:CFStringRef似乎堅持NSString沒有強大的參考只是__bridge(ARC)

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

「應該崩潰」 - 好吧,它不需要**崩潰。即使實例被釋放,它也可能工作。 – 2013-01-08 17:55:07

+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

引用Josh的評論: 「內存只是還沒有被重用,如果你打開malloc隨筆或守衛,你會得到你的崩潰。」