在Object-C里应用一个古老的C++小把戏

Posted on 2011-01-30 01:55  午后的小睡  阅读(659)  评论(0编辑  收藏  举报

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。