2

私はこのビットのコードを持っています:

 CFDictionaryRef lDictionary = AACreateDictionaryForFile(path);
 if (lDictionary) {
      printf("retct before: %ld\n", CFGetRetainCount(lDictionary));
      CFMakeCollectable(lDictionary);
      printf("retct after: %ld\n", CFGetRetainCount(lDictionary));
      return TRUE;
 } else {
      return FALSE;
 }

驚くべきことに、コードを実行すると、コンソールに次の出力が表示されます。

retct before: 1
retct after: 2147483647

私は期待していたでしょう:

retct 前: 1
retct 後: 0

私は何か間違ったことをしていますか?私は間違った期待を持っていますか?

4

1 に答える 1

1

2147483647は(2 ^ 31)-1です。これは32ビットの符号付き整数の最大値です。

ガベージコレクターは確かにこの値を一種のフラグとして使用します。だから心配しないでください、あなたのコードは大丈夫です。

于 2010-08-06T08:55:19.043 に答える