內存管理與屬性(mrc)

在MRC下

@property (nonmatic,strong)NSArray *currentArray;

- (void)viewDidLoad

{

? ? [super viewDidLoad];

? ? self.currentArray = [NSArray new];

}

- (void)dealloc

{

? ? [_currentArray release];

? ?[super dealloc];

}

這樣會導致內存泄露,因為創建array 的時候,retaincount是1,賦值給屬性(setter)方法的時候,retaincount 值增加1。而在dealloc的時候,只是釋放了一次,所以會導致內存泄露。修改如下,self.currentArray = [NSArray array]; 這樣的屬性retain的dealloc釋放,類方法產生的是autorelease對象。如下(strong 的setter方法)

- (void)setCurrentArray:(NSArray *)currentArray

{

? ? if(_currentArray != currentArray)

? ? {

? ? ? ? [_currentArray ?release];

? ? ? ? _currentArray = [currentArray retain];

? ? }

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Cocoa內存管理機制 (1)當你使用new、alloc、copy方法創建一個對象時,該對象的保留計數器值為1.當...
    John_LS閱讀 2,817評論 0 6
  • 內存管理 簡述OC中內存管理機制。與retain配對使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 2,013評論 1 16
  • 前言 基礎篇介紹了一些關于Objective-C內存管理的常見概念。本文將在前文的基礎上擴展以下知識:成員變量se...
    老板娘來盤一血閱讀 1,605評論 0 19
  • iOS開發中, 之前一直使用swift, 因此對于Objective-C的內存管理機制長期處于混亂的一知半解狀態....
    icetime17閱讀 871評論 1 8
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,217評論 30 472