首页 > 开发 > iOS > 正文

ios内存管理疑惑一

2017-09-08 14:03:30  来源:网友分享

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

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。