剛學(xué)objectivec,遇到內(nèi)存管理問題,情景是這樣的:啟用了arc,設(shè)定了一個(gè)Person類,只有一個(gè)weak的property,(NSMutableArray*)favorPerson.h如下#import@interfacePerson:NSObject@property(nonatomic,weak)NSMutableArray*favor;@endPerson.m如下#import"Person.h"@implementationPerson-(void)dealloc{NSLog(@"Persondealloc!");}@endmain.m如下#import#import"Person.h"intmain(intargc,char*argv[]){Person*p=[[Personalloc]init];NSMutableArray*arr=[[NSMutableArrayalloc]initWithObjects:@"1",@"2",nil];p.favor=arr;NSLog(@"%@",p.favor);arr=nil;NSLog(@"%@",p.favor);}控制臺打印的結(jié)果是這樣的2015-09-1113:31:14.408Prog1[32787:193921](1,2)2015-09-1113:31:14.409Prog1[32787:193921](1,2)2015-09-1113:31:14.409Prog1[32787:193921]Persondealloc!我的分析是:arr剛開始指向的對象只有arr一個(gè)強(qiáng)指針指向它,雖然p.favor=arr,但favor屬性是weak的,那么當(dāng)arr=nil時(shí),這個(gè)對象就沒有強(qiáng)指針指向它了,此時(shí)該對象應(yīng)該被釋放,但是第二次打印的結(jié)果表明并沒有被釋放再但是,當(dāng)我注釋掉第一次的打印,即#import#import"Person.h"intmain(intargc,char*argv[]){Person*p=[[Personalloc]init];NSMutableArray*arr=[[NSMutableArrayalloc]initWithObjects:@"1",@"2",nil];p.favor=arr;//NSLog(@"%@",p.favor);arr=nil;NSLog(@"%@",p.favor);}打印結(jié)果卻是2015-09-1113:44:48.956Prog1[36117:210004](null)2015-09-1113:44:48.958Prog1[36117:210004]Persondealloc!即表明對象被釋放了我的問題是:啟用了arc后,對象在沒有強(qiáng)指針(強(qiáng)引用)的情況下是否被立即釋放?如果不是,是什么時(shí)候釋放?(注意我用init開頭的方法創(chuàng)建的數(shù)組對象,在非arc情況下是不會autorelease的,main函數(shù)中我也沒有@autoreleasepool)點(diǎn)語法是否會影響對象釋放?(我提這個(gè)問題的原因是,當(dāng)我不用property而是把favor設(shè)為@public的成員變量時(shí),用p->_favor打印第一次就不會出現(xiàn)arr=nil后沒有被釋放的情況)arc到底是怎樣決定何時(shí)釋放對象的呀?我知道arc是編譯時(shí)就決定了何時(shí)releaseretainautorelease,那它是怎么決定的呢?
xcode中啟用了arc后,是何時(shí)釋放對象?
DIEA
2019-04-14 11:28:34