有时候会用到一个自定义的类用来存储请求网络得到得数据,假如类定义如下:
Demo.h @interface Demo : NSObject @property(nonatomic,retain) NSString *userId,*name; @end Demo.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。