id
C宣言です。次のように、スコープベースの自動解放プールをcppプログラムに追加するだけです。
autorelease_pool.hpp
class t_autorelease_pool {
public:
t_autorelease_pool();
~t_autorelease_pool();
private:
id d_pool; // << you may opt to preprocess this out on other platforms.
private:
t_autorelease_pool(const t_autorelease_pool&);
t_autorelease_pool& operator=(const t_autorelease_pool&);
};
autorelease_pool.mm
t_autorelease_pool::t_autorelease_pool() : d_pool([NSAutoreleasePool new]) {}
t_autorelease_pool::~t_autorelease_pool() { [this->d_pool drain]; }
cppプログラムの場合:
void UpdateUI() {
t_autorelease_pool pool;
// your/their autoreleasing code here
}
別の方法(誤って使用するのは非常に簡単です)は、ObjCランタイムを直接使用することです-これは次のCプログラムのようになります:
#include <objc/runtime.h>
#include <objc/message.h>
...
id pool = objc_msgSend(objc_getClass("NSAutoreleasePool"), sel_getUid("new"));
/* do stuff */
objc_msgSend(pool, sel_getUid("drain"));