指標: 指向記憶體的位址arc概念指標變數 存放位址的變數
指標變數值 變數中存放的值(位址值)
指標變數指向的記憶體單元值 記憶體位址指向的值
1):強指標:預設的情況下,所有的指標都是強指標,關鍵字strong
2):弱指標:__weak關鍵字修飾的指標
宣告乙個弱指標的格式:
__weak person *p;
1 automatic reference counting,自動引用計數,即arc,也可以說是wwdc2011和ios5所引用的最大的變革和最激動人心的變化。arc是新的llvm3.0編譯器的一項特性,使用arc,可以說一舉解決了廣大ios開發者所憎恨的手動管理記憶體的麻煩arc的工作原理2 在工程中使用arc非常簡單:只需要像往常那樣編寫**,只不過永遠不寫retain,release和autorelesase三個關鍵字就可以~這是arc的基本原則
3 在arc開啟時,編譯器將自動在**何時的地方插入retain,release 和autorelease,而作為開發者,完全不需要擔心編譯器會做錯(除非開發者自己錯用arc了)
4 手動管理記憶體,可以簡稱mrc(manual reference counting)
5 arc與其他語言的"垃圾**"機制不同,arc:編譯器特性:"垃圾**"執行時特性
1 arc是objective-c 編譯器的特性,而不是執行時特性或者垃圾**機制,arc所做得只不過是在**編譯時為你自動在合適的位置插入release或autoreleasearc的判斷準則;
1如何判斷當前是否處於arc中?只要沒有強指標引向物件,物件就會被釋放
2 注意:當使用arc的時候,暫時忘記"
引用計數器
",因為判斷標準變了
1arc下單物件記憶體管理1.ios5以後,建立專案預設的都是arc
2 all ----leveles 檢索 auto 可以看到 objective-c automatic referece counting 是否是 yes32
.arc機制下有幾個明顯的標誌:41
)不允許呼叫物件的release方法52
)重寫dealloc方法的時候,不能使用 [super dealloc];
63)不允許呼叫autorelease方法
1arc下多物件記憶體管理1.在arc下沒有強指標引用是否會實時的立即被釋放?
2會,只要沒有強指標引向,立刻馬上的被釋放掉3例:
4 car *car =[[car alloc]init];5//
物件有沒有被釋放?
6 car=nil;7//
會不會報錯?
8 car.speed = 10;9
101).會被釋放,car被賦值為nil ,原來在堆區的空間沒有強指標指向,記憶體空間會被釋放
112).不會報錯---->為什麼?
12 car.speed---->[car setspeed:10
];13 當car =nil;
14 [nil csetspeed:10] ;所以不會報錯 //
給nil傳送任何訊息都不會報錯
1516172
.強弱指標181
)強指標
19所有的指標預設就是強指標
20強指標使用__strong 標示212
)弱指標
22用__weak修飾的指標變數,都是弱指標
23//
car 強指標 car2弱指標 兩者指向相同的記憶體空間
24 __weak car *car2 =car;
25 car2 =nil;//
不會是釋放記憶體
arc下迴圈引用的問題
1 如果是兩個物件迴圈引入,那麼只要將其中的乙個設定為weak 弱指標就可以避免無法釋放的問題arc下 @property引數
1arc特點總結arc中的@property
2strong: 用於oc物件,相當於mrc總的retain
3weak:用於oc物件,相當於mrc的assign
4assign: 用於基於資料型別,跟mrc中的assign一樣
5copy: 一般用於nsstring,跟mrc中的copy一樣
6 在arc情況下解決"
迴圈retain
"的問題:@property 一邊用strong,一邊用weak;
1arc使用注意事項1)不允許呼叫release,retain,retaincount22
)可以重寫dealloc,但是不允許呼叫[super dealloc];33
)@property的引數
4strong:相當於原來的retain(適用於oc物件型別),成員變數是強指標
5weak:相當於原來的assign,(適用於oc物件型別),成員變數是弱指標
6 assign:適用於非oc物件型別(基礎型別)
1arc模式下如何相容非arc的類1)arc中,只要弱指標指向的物件不在了,就直接把弱指標做清空操作
22)__weak person *p =[[person alloc]init];//
不可以,物件一建立出來就被釋放掉了,對方釋放後,arc把指標自動清零33
)arc中的property處不再使用retain,而是使用strong,在dealloc中不需要在[super dealloc]
4 @perperty(nonatomic,strong)dog *dog;5//
意味著生成的成員變數_dog是乙個強指標,相當於以前的retain
64)如果換成是弱指標,則換成weak,不需要加__;
1讓程式相容arc和非arc部分。
2 -轉變為非arc -fno-objc-arc
3 -轉變為arc的, -f-objc-arc
mrc 轉換成arc
轉換之前記得先備份檔案
OC記憶體管理之ARC
除了特殊場合,使用arc是大勢所趨。因為這不僅能夠提高程式設計師的開發效率,讓程式設計師把精力專注在功能實現上,也大大節約了專案的開發成本,更提高了程式的可維護性。1.使用arc的重要關注點就是 物件是否有強指標指向,沒有強指標指向的物件會被系統自動 2.property關鍵字 強指標用strong...
OC的ARC(自動記憶體管理)注意事項
記憶體管理原則 配對原則 只要出現了new,alloc,retain方法,就要配對出現release,autorelease 物件存入到自動釋放池中,當這個池子被銷毀的時候他會對池子中所有的物件進行一次release操作 怎麼把物件存到池子中 arc簡單,不用程式設計師在去管理記憶體 1.強指標 s...
OC中非ARC環境下的記憶體管理小記
一 計數器的基本操作 1 retain 1 2 release 1 3 retaincount 獲得計數器的值 二 set方法的記憶體管理 1 set方法的實現 void setcar car car if car car car release car car 2 dealloc方法的實現 不要直...