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。