有时候会用到一个自定义的类用来存储请求网络得到得数据,假如类定义如下:
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是不是没有被释放,进而会产生内存泄漏得可能?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
release只是减少了对象的引用计数,只有当对象的引用计数减少到0的时候,dealloc才会被调用。
你在release之前就把它塞到datas里去了,所以该对象的引用计数还是1。
因为[datas addObject:demo];后
datas retain了你的demo。
等你把datas清空时,就会执行dealloc了。