有时候会用到一个自定义的类用来存储请求网络得到得数据,假如类定义如下:
Demo.h@interface Demo : NSObject@property(nonatomic,retain) NSString *userId,*name;@endDemo.m@implementation Demo@synthesize userId,name;-(void)dealloc{ NSLog(@"Demo dealloc"); [userId release]; [name release]; [super dealloc];}@end
在一个UIViewController的viewDidLoad方法中执行如下代码
NSMutableArray *datas=[[NSMutableArray alloc]init]; for(int i=0;i<5;i++){ Demo *demo=[[Demo alloc]init]; [demo setName:[NSString stringWithFormat:@"name--%d",i]]; [demo setUserId:[NSString stringWithFormat:@"userId--%d",i]]; [datas addObject:demo]; [demo release]; }
发现Demo.m中得dealloc方法没有执行,那么在这个类中有retain修饰的userId和name是不是没有被释放,进而会产生内存泄漏得可能?
解决方案
release只是减少了对象的引用计数,只有当对象的引用计数减少到0的时候,dealloc才会被调用。
你在release之前就把它塞到datas里去了,所以该对象的引用计数还是1。