眾所周知,iOS開(kāi)發(fā)中落剪,assign和weak都是弱引用睁本,基礎(chǔ)數(shù)據(jù)類(lèi)型我們一般都是用assign修飾,而對(duì)象一般都是用weak修飾的。那么問(wèn)題來(lái)了忠怖,如果用assign修飾對(duì)象呢堰,會(huì)產(chǎn)生什么的后果?
在弄清之前凡泣,我們首先要了解一下內(nèi)存管理機(jī)制枉疼。我們初始化一個(gè)對(duì)象如下:
Objct *obc =[ [Objct alloc]init];
@property(assign)int a;
@property(assign) Objct ?*obc;
對(duì)于以上?Objct 對(duì)象內(nèi)存分配控件存在于堆上,而地址指針obc存在于棧上鞋拟。對(duì)于a骂维,內(nèi)存空間存在于棧上面,都知道存在棧上面的由系統(tǒng)統(tǒng)一管理贺纲,不需要程序員去管理航闺,而存在于堆上的空間需要程序員去手動(dòng)管理的,當(dāng)我們將對(duì)象銷(xiāo)毀的時(shí)候,對(duì)象的內(nèi)存空間釋放猴誊,存在于棧指針也會(huì)nil来颤,就不會(huì)產(chǎn)生野指針了〕碇猓回到上面問(wèn)題福铅,如果用assign修飾一個(gè)對(duì)象后,當(dāng)對(duì)象被釋放后项阴,存在于棧上的指針還是存在的滑黔,假如此時(shí)使用指針,它就是一個(gè)野指針了环揽,就容易造成程序崩潰略荡,如果是用weak修飾的對(duì)象,則不會(huì)產(chǎn)生上面的情況歉胶,因?yàn)閷?duì)象銷(xiāo)毀的時(shí)候汛兜,系統(tǒng)會(huì)將指針置nil,也就不會(huì)產(chǎn)生野指針了通今。
綜上所述粥谬,修飾對(duì)象用weak肛根,基礎(chǔ)數(shù)據(jù)類(lèi)型用assign。