namespace ocutil {
class AutoreleasePoolCaller {
public:
AutoreleasePoolCaller():pool([[NSAutoreleasePool alloc]init]) {
}
~AutoreleasePoolCaller() {
[pool drain];
}
private:
NSAutoreleasePool *pool;
};
}
在需要使用AutoreleasePool的Block里声明一个自动变量
{
ocutil::AutoreleasePoolCaller autoreleasePool;
// here is your code.
}
这样只要跳出Block,析构函数就会自动呼叫[pool drain],当程序流程变得很复杂,实在忍无可忍想要在某个深层嵌套中goto或者return的时候,就不怕忘记写[pool drain]了;
很怀念这个小把戏,当年刚工作时,传授我这个小把戏的人用它来实现mutex锁的自动lock和unlock。
浙公网安备 33010602011771号