關於OC中迴圈引用問題

2021-07-07 03:10:52 字數 1932 閱讀 4898

mrc中我們經常遇到迴圈

retain

問題導致記憶體洩露。

dog

#import

@class

person;

@inte***ce

dog :

nsobject

@property

(nonatomic

,retain

) person

*owner;

//dog

類中有乙個

peson

型別的主人 -(

void

)run;

@end

@implementation

dog

-(void

)dealloc

-(void

)run

**********************

分割線***********************

person

#import

@class

dog;

@inte***ce

person :

nsobject

@property

(nonatomic

,retain

) dog

* dog;

//而在

person

型別中有個

dog型別的狗 -(

void

)liudog;

@end

@implementation

person -(

void

)liudog

-(void

)dealloc

@end

執行完並沒有像我們想象的那樣呼叫

dealloc

方法,顯然不管是do

g類還是

person

類都沒有被釋放。

在arc

中同樣存在這種問題

@class

dog;

#import

@inte***ce

person :

nsobject -(

void

)liudog;

@property

(nonatomic

,strong

) dog

*dog;

@end

#import

"dog.h"

@implementation

dog

-(void

)run

-(void

)dealloc

@end

person類

@class

person;

#import

@inte***ce

dog :

nsobject -(

void

)run;

@property

(nonatomic

,strong

)person

*owner;

@end

@implementation

person -(

void

)liudog

-(void

)dealloc

@end

//當你用強指標分別指向狗和人的時候

intmain(

intargc,

const

char

* argv)

return0;

OC 026 記憶體管理中迴圈引用的問題

記憶體管理中有乙個迴圈引用的問題出現,雖然 看似沒有任何記憶體問題,但是由於互相引用,而造成了記憶體洩露。沒能正確的 記憶體。所以解決的辦法是在乙個完成的迴圈體內其中乙個物件中,讓其不加入記憶體管理 來破壞相互引用的問題。在迴圈引用中,需要用到 class 來告訴編譯器有這個類,不要再用 impor...

OC 記憶體管理 迴圈引用

儲存消耗空間 ram rom 記憶體模型 cg arc mrc 記憶體變數 堆 棧 靜態區 迴圈引用在block函式中經常發生舉個例子 建立兩個全域性變數 乙個為block 另乙個是str inte cenextviewcontroller property nonatomic,strong dis...

Day12 oc迴圈引用

開發中引用乙個類的規範 1 在.h中用 class來宣告類 2 在.m中用 import來包含所有類的東西 person.h class card 在標頭檔案中僅僅 class,用在標頭檔案中宣告乙個類,相比較import不是全部匯入 inte ce person nsobject property...