亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么情況,我發現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 關注
  • 159 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號