天天看點

IOS 的記憶體管理了解

有”建立“就要有”銷毀“ 針對建立和銷毀過程進行管理

OC采用”引用計數“管理記憶體 1、使用alloc為對象配置設定記憶體,使用dealloc釋放對象所占用的記憶體 2、使用alloc、new或者copy夠着對象時,對象的retainCount為1 3、調用對象的retain方法可以增加1 retainCount 4、調用對象的release方法可以減少1 retainCount 5、當對象的retainCount為0時,dealloc會自動調用,釋放對象記憶體;否則,配置設定給對象的記憶體将會被一直占用。 6、所有對象可以使用retainCount屬性檢視目前的計數器值。

申請記憶體的權利有兩種 1是程式員 2是系統

會影響計數器的操作 1、alloc建立一個對象,并将其引用計數器設為1,并擁有對象的所有權 2、copy制造一個副本,并将副本的引用計數器設為1,并擁有副本的所有權,然後釋放舊對象 3、retain使對象計數器加1,并擁有對象所有權 4、release使對象計數器加1,并擁有對象所有權 5、autorelease向autoreleasepool注冊

一個類中,如果這個類屬性聲明retain或者copy的屬性,那麼我們需要在這個類的dealloc方法裡面釋放這個屬性

便利構造器 return[stu autorelease]; 不立即釋放,而是交給autoreleasepool

記憶體釋放原則: 1、誰申請誰釋放 2、凡是出現retain、alloc、copy的地方,都應出現release與之比對使用。 3、a 記憶體無法确定釋放時間時,可以隻用autorelease向最近的池注冊       b 由池決定釋放所有池的時間       c 使用便利構造器獲得的對象,都應是autorelease的

retain:釋放舊的對象,将舊對象的值賦予輸入對象,再提高輸入對象的引用計數為1

1、使用copy:對NSString 2、使用retain:對其他NSObject和其子類

strong和weak關鍵字的意義和使用方法 @property(strong) MyClass * myObjiect; 相當于:@property(retain)  MyClass * myObjiect;

@property(weak) MyOtherClass * delegate; 相當于: @property(assign) MyOtherClass * delegate;

一般情況下,所有的指針都是強指針