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

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

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

//非oc物件(型別名稱 屬性名)
@property (nonatomic,assign) int age;

1.Set方法記憶體管理相關的引數 1)retain:release舊值,retain新值(適用於oc物件) 2)assign:直接賦值(預設,適用於非oc物件型別) 3)copy:release舊值,copy新值(一般用於NSString*) 2.是否要生成Set方法 1)readwrite:同時生成setter和gett的宣告和實現(預設) 2)readonly:只會生成getter的宣告和實現 3.多執行緒管理(程式設計最為複雜) 1)nonatomic :效能高,一般就用這個 2)atomic:效能低,預設 4.setter和getter方法的名稱 1)setter:決定了set方法的名稱,一定要有個冒號 2)getter:決定了get方法名稱(一般用在BOOL型別的get方法) 二、 迴圈引用
[email protected]
的作用 僅僅只是告訴編譯器,某個名稱只是一個類
// @class僅僅是告訴編譯器,Person只是一個類
@class Person;

@interface Person : NSObject

@property (nonatomic,retain) Person *person;

@end


2.開發中引用一個類的規範 在.h檔案中用@class來宣告類 在.m檔案中用#import來包含 3.兩端迴圈引用retain的解決方案 一端用retain,另一段用assign 三、autorelease方法(半自動釋放)
    
    Person *p = [[[Person alloc] init] autorelease];
    
    // 不需要在呼叫release方法
    //[p release];
    p.age = 10;

1.autorelease的基本用法 1)會將物件放到一個自動釋放池中 2)當自動釋放池被銷燬時,會對池子裡面的所有物件做一次release操作 3)會返回物件本身 4)呼叫完autorelease方法後,物件的計數器不變 2.autorelease的好處 1)不用在關心物件釋放的時間 2)不用在關心什麼時候呼叫release 3.使用注意 1)佔用記憶體較大的物件不要隨便使用autorelease 2)佔用記憶體較小的物件使用autorelease沒有太大影響 4.錯誤寫法 1)第一種
int main() {
    
    @autoreleasepool {
        
        // alloc之後呼叫了autorelease,又呼叫release
        Person *p = [[[Person alloc] init] autorelease];
        
        // 錯誤寫法
        [p release];
    }
    return 0;
}
2)第二種
int main() {
    
    // 連續多次呼叫autorelease
    @autoreleasepool {
        
        // 錯誤寫法
        Person *p = [[[[Person alloc] init] autorelease] autorelease];
        
           }
    return 0;
}

5.自動釋放池 1)在ios程式執行過程中,會建立無數個池子,這些池子都是以棧結構存在(先進先出) 2)當一個物件呼叫autorelease方法時,會將這個物件放到棧頂得釋放池 6.自動釋放池的建立方式 1)iOS  5.0以前
    
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
    [pool release];
    //[pool drain];

2)iOS 5.0以後
int main() {

    @autoreleasepool {
        
        
        
    }
    return 0;
}

相關推薦

黑馬程式設計師————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記憶體管理

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

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

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

黑馬程式設計師————OC面向物件_三大特性之封裝

#import <Foundation/Foundation.h> @interface Car : NSObject @end @implementation Car // 物件方法 - (void)test { NSLog(@"111"); // 類方法呼叫

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

移動裝置的記憶體極其有限,每個app所能佔用的記憶體是有限制的.當app所佔用的記憶體較多時,系統會發出記憶體警告,這時得回收一些不需要再使用的記憶體空間。比如回收一些不需要使用的物件、變數等。基本的資料型別是放在記憶體的棧裡面,這是不需要我們去管理的,系統會自動回收。但是

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

Objective-C提供了三種記憶體管理方式: MannulReference Counting(MRC,手動管理, iOS4.1之前的版本) automatic reference counting(ARC,自動引用計數,iOS4.1 之後推出的) garbage collection(垃圾回收)。iO

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

                              引用計數器: 每個OC物件都有自己的引用計數器,是一個整數表示物件被引用的次數,即現在有多少東西在使用這個物件。物件剛被建立時,預設計數器值為1,當計數器的值變為0時,則物件銷燬。                 2)對引用計數器的操作     

黑馬程式設計師 OC基礎: 記憶體管理

記憶體管理 簡述 每個 oc 物件都有自己的引用計數器,是一個整數,表示”物件被引用的次數”.佔四位元組 計數器預設值為1 當為0時,物件佔用的記憶體會被系統回收. 引用的操作 給物件傳送一條 retain 計數器+1 給物件傳送一

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

1.記憶體的建立和釋放 讓我們以Object-c世界中最最簡單的申請記憶體方式展開,談談關於一個物件的生命週期。首先建立一個物件: id testObject = [[ClassName alloc] init]; //“ClassName”是任何你

黑馬程式設計師OC語言基礎—記憶體管理

之前我們已經提到過C語言中的記憶體儲存空間。有五大區域:堆、棧、自由儲存區、全域性\靜態儲存區和常量儲存區。 OC是以C語言為基礎的,所以也分這五大區域。 下面我們討論一下OC中記憶體管理的規律。 一、引用計數器 1.每個OC物件都有自己的引用計數器,是一個整數,即物件被

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

=== 記憶體管理機制 === OC的區域性變數在程式碼塊結束時被系統銷燬, 記憶體被回收. OC的物件, 內部有引用計數器, 當引用計數器的值為0時, 被系統銷燬, 記憶體被回收. 區域性變數存放在棧中. 物件存放在堆中. 注意, 物件指標還是存放在棧中, 物件本身佔用的記憶體存放在堆中. 在OC

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

1. 控制set方法的記憶體管理 retain : release舊值,retain新值(用於OC物件)  assign : 直接賦值,不做任何記憶體管理(預設,用於非OC物件型別) copy   : release舊值,copy新值(一般用於NSString *) 2.  控制需不需生成set方法 re

黑馬程式設計師——OC基礎——記憶體管理(一)

一,為什麼要進行記憶體管理 1,由於移動裝置的記憶體有限,所以每個APP所佔的記憶體也是有限制的,當APP所佔用的記憶體較多時,系統就會發出警告,這時就需要回收一些不需要繼續使用的記憶體空間,比如回收一些不再使用的物件和變數等。 任何繼承NSObject的物件,對其他的基

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

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! ------- 法則 誰建立記憶體誰就要釋放記憶體 管理機制 引用計數器 1使用alloc(相當於C語言中的malloc)為物件分配記憶體,使用dealloc(相當與C語言中的fre

黑馬程式設計師_7K面試題_交通燈管理系統

-面向物件分析設計經驗:誰用於資料,誰就對外提供操作這些資料的方法。 典型案例:      人在黑板上畫圓。 分析: 共有三個物件:人、黑板、圓。動作:畫 畫圓需要圓心和半徑,圓心和半徑都是圓的屬性上,圓擁有資料,所以圓物件提供畫圓的方法 圓在黑板上,黑板擁有

黑馬程式設計師之專案開發學習筆記:酒店管理系統(HotelManager)

--------------------------------------------2345王牌技術員聯盟、2345王牌技術員聯盟、期待與您交流!--------------------------------------------- 某酒店擬開發一套內部管理系統,基

黑馬程式設計師-OC學習筆記-點方法、成員變數作用域以及set方法和get方法@property的綜合題

------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! ------- 1.  OC建立物件的拓展: Frac