内存管理范围和@property
管理范圍:?
管理任何繼承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-C object. ( #define nil ((id)0) ) nil 是一個對象值。
Nil: A null pointer to an Objective-C class.?
NULL: A null pointer to anything else. ( #define NULL ((void *)0) ) NULL是一個通用指針(泛型指針)。?
NSNull: A class defines a singleton object used to represent null values in 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)set和get方法的名稱?
修改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;?
?
轉載于:https://www.cnblogs.com/ljcgood66/p/5295772.html
總結
以上是生活随笔為你收集整理的内存管理范围和@property的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式(七)适配器模式(Adapter
- 下一篇: 一个简单的blog系统(四) 实现用户页