一、@property引數
1.引數可有可無。基本型別可以用
@property
(assign
)int
age; 直接賦值,寫不寫一樣的。
2.引數主要分三類:1.)讀寫屬性:
readwrite
/readonly/
2.)
setter
處理:assign
/retain
/copy
2.) 原子性:
atomicity
/nonatomic
(加鎖會耗效能,盡量使用
nonatomic)
3.為了保證**的可讀性,在
bool
型別生成
getter
盡量重名為
is***
,ex:isrich
. 二、示例
以下面的程式為示例,來看看@property的引數使用
@class book;
@class card;
@inte***ce student : nsobject
// 這裡的retain代表:在set方法中,release舊值,retain新值
@property (nonatomic, retain) book *book;
@property (retain) card *card;
// readonly代表只生成get方法的宣告
// 預設是readwrite,同時生成get和set方法的宣告
@property (readonly) int age;
// atomic就代表給方法進行加鎖,保證執行緒安全
@property (atomic) int no;
// nonatomic代表方法不需要考慮執行緒安全問題
@property (nonatomic, assign) int no2;
// getter是用來指定get方法的方法名
@property (nonatomic, getter = isrich) bool rich;
@end
@implementation student
//- (void)setbook:(book *)book
//}//
//- (void)setcard:(card *)card
//}- (void)dealloc
@end
在main方法中寫個測試如下:
@autoreleasepool
三、自動釋放池(
autorelease pool)
1.自動釋放池是oc裡面的一種自動**機制,一般可以將一些變數新增到自動釋放池中統一釋放。
當自動釋放池銷毀時,池裡面的所有物件都會呼叫一次
release
方法。
2.oc物件只需要傳送一條autorelease訊息,就會把這個物件新增到最近的自動釋放池中(棧頂的釋放池) 3.
autorelease
實際上只是把對release的呼叫延遲了,對於每一次autorelease,系統只是把該物件放入當前的autorelease pool,當該pool被釋放時,該pool中的所有物件都會呼叫release。
@自動釋放池作用:統一**物件。
@說明:
1.自動釋放池被銷毀,所有物件計數器減一,並不一定會被銷毀。
2.@autoreleasepool 執行完了就銷毀自動釋放池。
3.[stu autorelease];不會馬上釋放,會交給池子管。
4.對於每乙個runloop,系統隱式建立乙個autorelease pool,並把建立好的pool放在棧頂,所有的pool會構成乙個棧式結構。在每乙個runloop結束時,當前棧頂的pool會被銷毀,這樣這個pool裡的每個物件會執行release操作。
@自動釋放池建立:
1.ios 5.0之後
@autoreleasepool
2.ios5.0之前
nsautoreleasepool *pool = [[nsautoreleasepool alloc ] init ] ;[ pool release ] ;
3.靜態物件用以快速建立物件。
4.ios開發潛規則:靜態方法返回物件都是自動釋放的。
@自動釋放池注意:
1.在arc下,不能使用 [[nsautoreleasepool alloc ] init ] ,而應當使用@autoreleasepool{}
2.不要把大量迴圈操作放在同乙個自動釋放池中,這樣會造成記憶體峰值上公升。
3.盡量避免對大記憶體使用該方法,對於這種延遲釋放機制,還是盡量少用。
4.sdk中一般利用靜態方法建立並返回的物件都是已經autorelease的,不需要再進行release操作。
四、示例
int main(int argc, const char * argv)
// 盡量不要這樣,不會及時釋放,還會造成峰值高
}return 0;
}
oc學習之旅 記憶體管理
因為以前的 都是使用非arc 手動管理 而arc還不太完善,因此學習非arc模式還是有必要的。在用非arc模式 引用計數器概念 oc中,在oc定義的型別都設計有乙個引用計數器retaincount。而oc中的引用分兩種,一種是強引用retain 對應arc中的strong 另一種是弱引用assign...
IOS學習 OC記憶體管理
記憶體管理 引用計數器 oc物件被引用的次數,為0的時候該物件被銷毀,記憶體 retain 引用次數 1 返回的是物件本身 release 引用次數 1 沒有返回值 retaincount 獲取引用次數。dealloc oc物件被銷毀的時候會呼叫dealloc方法,繼承該 方法 放最後面 super...
Oc 記憶體管理
1 對你自己擁有的物件負責,你只能釋放你擁有的物件 2 凡是你通過 retain alloc copy等手段獲得了所有者的物件,都必須在你不使用的時候來呼叫release autorelease等手段來釋放對他的所有權 3 在一定的 段內,對同乙個物件所作的copy alloc retain的操作次...