MRC 迴圈retain的問題

2021-07-06 02:45:07 字數 766 閱讀 2677

如果兩個類迴圈引用  都使用了@perperty(nonatomic ,retain)將會在釋放物件的時候出現問題如;

person.h

@property(donation, retain) dog*dog;

dog.h

@property(donation,retain)person*person;

main.m

dog*d = [dog new];

person *p = [person new];

d.person = p;

p.dog = d;

[d release];

[p release];

這樣的程式p和d都沒有釋放掉

解決方法 

如dog物件用了@property(donation, retain) person*person;    那麼person物件@property(donation, retain) dog*dog; 改為person物件@property(donation,assign) dog*dog;

如person物件用了@property(donation, retain) dog*dog;    那麼person物件@property(donation, retain) person*person;改為person物件@property(donation, assign) dog*dog;

為了避免mrc下物件迴圈引用無法釋放的問題  在@property的時候,不可以兩個物件同時使用,應乙個使用retain,另乙個使用assign。

迴圈retain導致記憶體洩露

dog.h import class person inte ce dog nsobject property nonatomic,retain person owner end person.h import class dog inte ce person nsobject property n...

幾個屬性修飾的問題retain 和 copy

如果說retain只是乙個指標copy 而 copy是乙個指標和內容都copy的畫。那如下例子怎麼會不成立?如下 import viewcontroller.h inte ce viewcontroller property nonatomic,copy nsstring namecopy prop...

幾個屬性修飾的問題retain 和 copy

如果說retain只是乙個指標copy 而 copy是乙個指標和內容都copy的畫。那如下例子怎麼會不成立?如下 import viewcontroller.h inte ce viewcontroller property nonatomic,copy nsstring namecopy prop...