1

ARC では、__bridge は、所有権の譲渡を伴わない単なるキャストを意味するものと想定されています。ただし、次のコード スニペットはクラッシュしません。

    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));

nil を str に割り当てると、理想的には文字列の割り当てが解除され、printf 行がクラッシュするはずです。

4

1 に答える 1

1

Joshのコメントを引用すると、「メモリはまだ再利用されていません。mallocの落書きまたはガードをオンにすると、クラッシュが発生します。」

于 2013-01-09T05:50:46.997 に答える