您的位置:首页 > 其它

MRC模式下生成的类对象自动使用 autorelease

2015-07-30 22:23 337 查看
之前在一篇博客里看到,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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: