1. 程式人生 > >黑馬程式設計師-----OC記憶體管理(二)

黑馬程式設計師-----OC記憶體管理(二)

---------------------- ASP.Net+Unity開發.Net培訓、期待與您交流! ----------------------

OC記憶體管理
1>記憶體管理原則
①只要還有人在用某個物件,那麼這個物件就不會被回收;只要想用這個物件,就讓計數器+1;檔不想使用這個物件,就讓物件的計數器-1。
②如果你通過alloc,new或者[mutable]copy來建立一個物件,那麼你就必須呼叫release或者autorelease,如果不是你建立的,你就不需要去[auto]release。
③只要你掉用了retain,無論這個物件是怎麼產生的,你都要呼叫release。
2>記憶體管理例項
//Book.h
@interface Book : NSObject
{
 int _price;
}

- (void)setPrice:(int)price;
- (int)price;
@end

//Book.m
@implementation  Book
- (void)setPrice:(int)price
{
 _price = price;
}
- (int)price
{
 return _price;
}
//重寫dealloc
- (void)dealloc
{
 NSlog(@"Book被回收");
 [super dealloc];
}
@end


//Person.h

@class Book;
@interface Person : NSObject
{
 Book *_book;
}
- (void)setBook:(Book *)book;
- (Book *)book;
@end

//Person.m
@implementation
- (void)setBook:(Book *)book
{
 //我們的Person為了擁有一個book那麼,就需要(讓book的計數器+1)retain;
 if(_book != book)
 {
  [_book release];
  _book = [book retain];
 }
}
- (Book *)book
{
 return _book;
}
//重寫dealloc方法
- (void)dealloc
{
 //在遺言之前,必須對所有的你擁有的物件release,這裡只有_book。
 [_book release];
 [super dealloc];
}
@end

//main.m
int main()
{
 //計數器b為1,p為1
 Book *b = [[Book alloc] init];
 Person *p = [[Person alloc] init];
 
 //計數器b為2,p為1
 //p想佔用b這本書,就需要retain,放在setter方法中
 [p setBook:b];
 //計數器b為1,p為1
 [b release];
 b = nil;
 
 //計數器b為0,p為0
 [p release];
 p = nil; 

 return 0;
}
3>setter方法的記憶體管理
①setter方法實現
- (void)setBook:(Book *)book{
 if (book != _book) {
  [_book release];
  _book = [book retain];
 }
}
②@property的記憶體管理
//自動生成setter方法管理記憶體,會先release舊值,retain新值
@property (nonatomic, retain) Book *book;
//重寫dealloc方法
方法同上。

4>小零碎
①有加就有減,曾經讓物件計數器+1,就必須在最後讓計數器-1。
②在dealloc當中必須將物件當中擁有的物件進行release,而且因為OC不存在空指標錯誤即[nil release]沒有錯的,那麼我們可以在dealloc中對所有的物件成員呼叫一次release方法。
③setter方法先release舊指,再retain新指。
④在需要進行記憶體管理的,必須使用@property (retain)(或者手動實現setter方法)和重寫dealloc方法。
⑤@property常用引數:retain,assign,copy,readonly,readwrite
⑥BOOL型別的變數getter方法名以is開頭eg:isRich

---------------------- ASP.Net+Unity開發.Net培訓、期待與您交流! ----------------------詳細請檢視:www.itheima.com

相關推薦

黑馬程式設計師-----OC記憶體管理

---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ---------------------- OC記憶體管理1>記憶體管理原則 ①只要還有人在用某個物件,那麼這個物件就不會被回收;只要想用這個物件,就讓計數

黑馬程式設計師————OC記憶體管理_筆記整理()

一、@Prpperty引數 // 加上retain:表示生成的set方法,release舊值,retain新值 @property (retain) Book *book; // oc物件型別 //@property (nonatomic,retain) 類名 *屬性名

[黑馬程式設計師][OC]記憶體管理

一、記憶體管理的基本原理 1.什麼是記憶體管理 移動裝置的記憶體極其有限,每個app所能佔用的記憶體是有限制的,當app所佔用的記憶體較多時,系統會發出記憶體警告,這時得回收 一些不需要再使用的記憶體空間。比如回收一些不需要使用的物件、變數等。管理範圍:任何繼承了NS

黑馬程式設計師————OC記憶體管理_ARC

ARC( Autom Reference Counting) 是一個編譯器特性,會自動檢測幫我們release 一、ARC基本原理 1.編譯器特性 編譯程式碼的過程中會自動檢測哪裡需要插入自動釋放記憶體的程式碼 // 新建立一個物件,會自動釋放物件 P

黑馬程式設計師-----OC記憶體管理原則

------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! ------- Objective-C對記憶體管理的方法

黑馬程式設計師---oc 記憶體管理

——Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! ——- 一、基本原理 (一)為什麼要進行記憶體管理。   由於移動裝置的記憶體極其有限,所以每個APP所佔的記憶體也是有限制的,當app所佔用的記憶體較多時,系統就會發出記憶體

黑馬程式設計師——Java IO流之流操作規律總結、File類、Properties類、序列流等

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 六、流操作規律總結  1.明確源和目的:   源:    字元流:FileReader(純文字檔案)。    位元組流:FileInputStream(

黑馬程式設計師——Java面向物件之封裝、繼承、多型、介面等

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 五、面向物件的特徵  面向物件主要有三大特徵: 1.特徵一 —— 封裝  1)定義:是指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式。 2)好處:

黑馬程式設計師——Java集合框架之泛型

培訓、java培訓、java學習型技術部落格、期待與您交流!------------               泛型 一、泛型概述 1.什麼是泛型? 泛型就是指將資料型別引數化,把以前固定的資料型別用一個代表資料型別的引數進行表示,該引數可以接受傳入的任意資料型別。可以這

黑馬程式設計師——Java語法基礎

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 七、函式      1.什麼是函式?       定義在類中的具有特定功能的一段獨立小程式 ,就叫函式,也可以稱為方法。      2.函式的

黑馬程式設計師-IOS學習筆記常用關鍵字和方法

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流!------- 常用關鍵字和方法: 一.記憶體管理情況 1- autorelease,當用戶的程式碼在持續執行時,自動釋放池是不會被銷燬的,這段時間內使用者可以安全地使用自動釋放的物件。當

【轉】【Linux 核心】記憶體管理夥伴演算法

        通常情況下,一個高階作業系統必須要給程序提供基本的、能夠在任意時刻申請和釋放任意大小記憶體的功能,就像malloc 函式那樣,然而,實現malloc 函式並不簡單,由於程序申請記憶體的大小是任意的,如果作業系統對malloc 函式的實現方法不對,將直接導致

黑馬程式設計師——Java集合框架之迭代器、Collection層次結構等

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 集合框架概述 一、什麼是集合框架   1.什麼是集合?   集合是指把具有相同性質的一類東西匯聚成一個整體,簡單說就是指儲存資料的一個容器。集

黑馬程式設計師——Java語言基礎

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------     對於Java初學者,學好Java語言基礎是非常重要的,這將影響將來程式設計的程式碼質量與效率。那麼Java語言基礎內容包括哪些呢?Java基礎內

黑馬程式設計師——Java面向物件之匿名物件、程式碼塊、static關鍵字等

   a)子類只繼承父類的預設(預設)建構函式,即無形參建構函式。如果父類沒有預設建構函式,那子類不能從父類繼承預設建構函式。    b)子類從父類處繼承來的父類預設建構函式,不能成為子類的預設建構函式。    c)在建立物件時,先呼叫父類預設建構函式對物件進行初始化,然後呼叫子類自身自己定義的建構函

黑馬程式設計師——Java集合框架之Map集合、Collections與Arrays工具類

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ Map集合 一、概述 Map集合儲存的元素是鍵值對,即將鍵和值一對一對往裡存,而且要保證鍵的唯一性。  問題思考:   1.如何保證鍵的唯一性?   

黑馬程式設計師——Java面向物件之內部類、異常、包等

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 六、物件的其他重要內容 1.單例設計模式  1)什麼是單例設計模式?   單例設計模式是指能夠確保一個類只有一個例項,並且能夠自行向整個系統提供這個例項

黑馬程式設計師——Java IO流之IO流概述、字元流、位元組流等

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ IO流 一、概述 1.IO流是用來處理裝置之間的資料傳輸。  2.Java對資料的操作時通過流的方式。  3.Java用於操作流的物件都在IO包中。  

程式設計師之工具雜燴

前端編輯器:Hbuilder、Visual Studio Code、JetBrains WebStorm  Java編輯器:Idea、Eclipse Python編輯器:JetBrains PyCharm Android編輯器:Android Studio Linux客戶端

技術系列之 記憶體管理

2、定長記憶體池。典型的實現有LOKI、BOOST。特點是為不同型別的資料結構分別建立記憶體池,需要記憶體的時候從相應的記憶體池中申請記憶體,優點是可以在使用完畢立即把記憶體歸還池中,可以更為細粒度的控制記憶體塊。    與變長的相比,這種型別的記憶體池更加通用,另一方面對於