NSAutoreleasePool解说

   当一个对象调用autorelease时,会将此对象放到最近的一个NSAutoreleasePool实例中,当自动释放池发送drain时会遍历释放池中的autorelease对象,把每个对象都release掉。
   对于每一个Runloop, 系统会隐式创建一个Autorelease pool, 这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object会被release。一个UI event,Timer call, delegate call, 都会是一个新的Runloop
  1.在主线程中每个event loop开始的时候会创建一个autorelease pool,在循环结束时清空自动释放池。
  2.每个子线程都维护着对应的NSAutoreleasePool对象,当子线程结束时会清空对应的自动释放池。
  3.如果局部代码有很多autorelease对象,此时应该自己新建一个自动释放池来管理,如:
    for (int i=0; i<largeNumber; i++) {
        NSString *str=@"ssss";
        str=[str lowercaseString];
        str=[str stringByAppendingString:@"aaa"];
    }
当这个largeNumber很大时就要自己新建一个自动释放池。

猜你喜欢

转载自wenrisheng.iteye.com/blog/1947444
今日推荐