記憶體管理範圍和 property

2022-03-30 11:19:43 字數 2748 閱讀 2566

管理範圍:

管理任何繼承nsobject的物件,對其他的基本資料型別無 效 

本質原因是因為物件和其他資料型別在系統中的儲存空間不一樣,其它區域性變數主要存放於 棧中,而物件儲存於堆中,當**塊結束時這個**塊中涉及的所有區域性變數會被**,指 向物件的指標也被**,此時物件已經沒有指標指向,但依然存在於記憶體中,造成記憶體洩 露。 

記憶體管理的原則 

1)原則

只要還有人在使用某個物件,那麼這個物件就不會被**; 只要你想使用這個物件,那麼就應該讓這個物件的引用計數器+1; 當你不想使用這個物件時,應該讓物件的引用計數器-1; 

2)誰建立,release

(1)如果你通過alloc,new,copy來建立了乙個物件,那麼你就必須呼叫release或者 autorelease方法

(2)不是你建立的就不用你去負責 

3)retain,release

只要你呼叫了retain,無論這個物件時如何生成的,你都要呼叫release 

4)總結

有始有終,有加就應該有減。曾經讓某個物件計數器加1,就應該讓其在最後-1. 

1)空指標:沒有指向任何東西的指標,給空指標傳送訊息不會報錯 關於nil和nil及null的區別: 

nil: a null pointer to an objective-cobject. ( #define nil ((id)0) ) nil 是乙個物件值。

nil: a null pointer to an objective-cclass

null: a null pointer toanything else. ( #define null ((void *)0) ) null是乙個通用指標(泛型指標)。 

nsnull: a class defines a singleton object used to representnull valuesin collection objects (which don't allow nil values). 

[nsnull null]: the singleton instance of nsnull. 

[nsnull null]是乙個物件,他用在不能使用nil的場合。 

@property

@property int age; 1)生成乙個_age 2)生成get和set方法的宣告 3)生成 get和set方法的實現 

@property (......) int age; 

1)記憶體管理相關引數

retain:對物件release舊值,retain新值(適用於oc物件型別) assign:直接賦值(預設,適用於非oc物件型別) copy:release舊值,copy新值 

驗證assign如果作用在物件上,實際上就是直接賦值 //使用@property增強型 生成get和set方法 

@property(nonatomic,assign)car *car; /* 

.m檔案中實際上生成的是

_car = car; //當物件release後,將無法使用該物件 

@property 引數(二) 

1)是否要生成set方法(若為唯讀屬性,則不生成)

readonly:唯讀,只會生成getter的宣告和實現 readwrite:預設的,同時生成setter和getter的宣告和實現 

2)多執行緒管理(蘋果在一定程度上遮蔽了多執行緒操作)

nonatomic:高效能,一般使用這個 atomic:低效能,預設 

3)setget方法的名稱

修改set和get方法的名稱,主要用於布林型別。因為返回布林型別的方法名一般以is開頭,修改名稱一般用 在布林型別中的getter。 

@property(nonatomic,assign, setter=abc:,getter=haha)int age 可以理解為把[psetage:]------>[pabc:], [page] --------->[phaha]; 

@property(nonatomic,assign, setter=setvip:,getter=isvip) bool vip; 

property的記憶體管理

1.set方法記憶體管理相關的引數 retain release舊值,retain新值 適用於oc物件型別 assign 直接賦值 預設,適用於非oc物件型別 copy release舊值,copy新值 2.是否要生成set方法 readwrite 同時生成setter和getter的宣告 實現 預...

範圍管理和範圍蔓延

1 範圍管理的前提 前提是專案的定義。專案是企業哪個戰略方向下的產物,專案想完成哪些具體目標?只有定義明確了,才有範圍。範圍必須緊密圍繞著定義來開展。範圍不足或範圍蔓延都會對專案產生影響 1 範圍管理包括了兩部分 一部分是實體的產品,比如開發出來的一套軟體 另一部分是專案的商業方案 銷售方案 服務體...

範圍管理和範圍蔓延

1 範圍管理的前提 前提是專案的定義。專案是企業哪個戰略方向下的產物,專案想完成哪些具體目標?只有定義明確了,才有範圍。範圍必須緊密圍繞著定義來開展。範圍不足或範圍蔓延都會對專案產生影響 2 範圍管理包括了兩部分 一部分是實體的產品,比如開發出來的一套軟體 另一部分是專案的商業方案 銷售方案 服務體...