私のプロジェクトは XCode 4.2 です。このプロジェクトは、通常のデバッグ ビルド用にコンパイルされます。
しかし、ビルド タイプをプロファイルに変更すると (メモリ使用量をプロファイルしたい)、この Objective-C++ C++ クラスからエラーが発生します。
/Volumes/mchinen/scm/Voicer/FilterAudioMixer.mm:53: エラー: プログラム /Volumes/mchinen/scm/Voicer/FilterAudioMixer.mm 内の '@' が外れています: メンバー関数内 'void FilterAudioMixer::WriteToBuffer(SInt16*, int )': /Volumes/mchinen/scm/Voicer/FilterAudioMixer.mm:53: エラー: 'autoreleasepool' はこのスコープで宣言されていませんでした /Volumes/mchinen/scm/Voicer/FilterAudioMixer.mm:53: エラー: 予想される
;' before '{' token /Volumes/mchinen/scm/Voicer/FilterAudioMixer.mm:147: error: expected
}' at入力の終わり
以下の @autoreleasepool 行は 53 行目です。
void FilterAudioMixer::WriteToBuffer(SInt16* buffer, int nb_samps)
{
@autoreleasepool {
//do a per element lock (todo)
pthread_mutex_lock(&playlist_lock);
FilterSound *snd;
size_t count = playlist.size();
for (size_t i = 0; i < count; i++) {
snd = playlist[i];
[snd writeToBuffer:buffer samples:nb_samps];
}
pthread_mutex_unlock(&playlist_lock);
if (m_mute) {
memset(buffer, 0, sizeof(SInt16) * 2 * nb_samps);
}
}
}
@autoreleasepool がプロファイルの下でのみ問題を引き起こしているように見えますが、それはなぜですか?
完全を期すために、ビルド結果ウィンドウのコンパイル行を次に示します。
build/Voicer-project-headers.hmap -iquote. -iquotePictures -iquoteCocoaSoundCloudUI -iquoteCocoaSoundCloudAPI -iquoteOHAttributedLabel -iquoteOAuth2Client -iquoteVoicer.xcworkspace -iquoteClasses -iquotehelp -iquoteJSONKit -iquoteShaders -iquoteaudio -iquotePictures/extremeprogrammingpics -iquotePictures/2010 -iquotePictures/Webcam -iquotePictures/2011 -iquotePictures/gui -iquoteCocoaSoundCloudUI/SoundCloud.bundle -iquoteCocoaSoundCloudUI/Sources -iquoteCocoaSoundCloudAPI/Sources "-iquoteOHAttributedLabel/AttributedLabel 例" -iquoteOHAttributedLabel/OHAttributedLabel -iquoteOAuth2Client/Sources -iquoteVoicer.