为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

iOS
拉莫斯之舞 2023-04-17 22:18:40
有时候会用到一个自定义的类用来存储请求网络得到得数据,假如类定义如下: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是不是没有被释放,进而会产生内存泄漏得可能?
查看完整描述

2 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

release只是减少了对象的引用计数,只有当对象的引用计数减少到0的时候,dealloc才会被调用。

你在release之前就把它塞到datas里去了,所以该对象的引用计数还是1。


查看完整回答
反对 回复 2023-04-20
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

因为[datas addObject:demo];后
datas retain了你的demo。
等你把datas清空时,就会执行dealloc了。


查看完整回答
反对 回复 2023-04-20
  • 2 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信