之前在一篇博客里看到,NSAutoreleasepool里定义且新生成的类对象,会隐式地自动给这个类对象使用一次autorelease方法。 但是,书上的代码和我自己写的代码表明,这个说法是不对的,必须是生成类对象方法里在生成了一个新对象之后,显式的调用了autorelease,才有这种方法的效果。 之前的这种说法,只是因为许多Foundation类的方法里做了这个事情,比如NSMutableString类。 而如果自己写一个类,没有这么做,那么就不会有这种效果。
//以下代码在MRC模式下运行
#import <Foundation/Foundation.h>
@interface TestClass :NSObject
{
int iCount;
}
@end
@implementation TestClass :NSObject
@end
int main(int argc, const char * argv[]) {
NSAutoreleasePool *pool=[NSAutoreleasePool new];
NSMutableString *mstr=[NSMutableString stringWithString:@"hello"];
TestClass *tc=[TestClass new];
printf("TestClass %lu\n",[tc retainCount]); //输出1
printf("NSMutableString %lu\n",[mstr retainCount]); //输出1
[pool drain];
printf("TestClass %lu\n",[tc retainCount]); //输出1
printf("NSMutableString %lu\n",[mstr retainCount]); //输出很大的数字,代表mstr所占内存已经被释放了
return 0;
}