什么情况,我发现Demo.m中得dealloc方法没有执行哈?

有时候会用到一个自定义的类用来存储请求网络得到得数据,假如类定义如下:

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是不是没有被释放,进而会产生内存泄漏得可能?


拉莫斯之舞
浏览 140回答 2
2回答

繁星淼淼

release只是减少了对象的引用计数,只有当对象的引用计数减少到0的时候,dealloc才会被调用。你在release之前就把它塞到datas里去了,所以该对象的引用计数还是1。

陪伴而非守候

因为[datas addObject:demo];后datas retain了你的demo。等你把datas清空时,就会执行dealloc了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS