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;
}
//以下代码在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;
}
相关文章推荐
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- 最流行的Java应用服务器排行
- android 定时器的使用
- 单片机中C语言指针与变量
- jQuery实现对P标签的操作
- C++中的运算符重载
- 探讨Unity3d跨平台原理
- 点到圆弧的距离(csu1503)+几何
- android 定时器的使用
- android 定时器的使用
- hdu 5301(枚举) Buildings
- C++ 智能指针详解
- apache服务器 403错误 禁止访问解决办法
- 高级声明(——C primer第13章)
- Android开发基础之菜单键的使用
- android 定时器的使用
- JAVA NIO的理解
- 谈谈闭包
- Labview使用DAQ数据采集的一些注意问题
- android 定时器的使用