在我的iOS應用程序中ARC被禁用。當我使用儀器工具檢查我的代碼時,我在代碼中發現了一些內存泄漏問題,如下所述。目標c中的內存泄漏問題應用程序
Obj1是一個在.h文件中聲明的對象(其類型爲classA
)。
self.Obj1 = [[classA alloc]init];
我釋放dealloc方法Obj1
:
我使用的代碼集在.m文件的Obj1
值。
此代碼正常工作。但顯示內存泄漏問題。
如何避免此內存泄漏問題。
在我的iOS應用程序中ARC被禁用。當我使用儀器工具檢查我的代碼時,我在代碼中發現了一些內存泄漏問題,如下所述。目標c中的內存泄漏問題應用程序
Obj1是一個在.h文件中聲明的對象(其類型爲classA
)。
self.Obj1 = [[classA alloc]init];
我釋放dealloc方法Obj1
:
我使用的代碼集在.m文件的Obj1
值。
此代碼正常工作。但顯示內存泄漏問題。
如何避免此內存泄漏問題。
如果你犯了一個屬性保留OBJ1由1意味着增量您的Alloc通過增量1這個對象在此之後,所以它的價值保持2
使用下面的代碼:
ClassA *objC = [[classA alloc]init];
self.Obj1 = objC;
[objC release];
使用下面的代碼:
self.Obj1 = [[[classA alloc]init]autorelease];
當視圖在不使用或卸載的dealloc纔會被調用。
有許多方法來處理這個問題:
首先,
self.Obj1 = [[[classA alloc]init]autorelease];
其次,
Obj1 = [[classA alloc]init];
...
// use self.Obj1 in the code
...
[Obj1 release];
三,
self.Obj1 = [[classA alloc]init];
...
[self.Obj1 release];
使用任何一個出這些。
您可以刪除self.
,只需Obj1 = [[classA alloc]init];
。 因爲當你調用self.
,您保留對象again.So self.Obj1 = [[classA alloc]init];
後,對象保留計數爲2
如果使用NSZombieEnabled宏處理工作,發佈對象的所有對象(甚至是發佈)將有至少1保留計數和工具會將所有對象顯示爲「泄漏」。處理內存泄漏時,只需關閉此宏。 參見技術參考: https://developer.apple.com/library/ios/technotes/tn2239/_index.html