Objective-c自學筆記(4)-記憶體管理中retain和release

來源:互聯網
上載者:User

學習的時候碰到了如下的例子:


#import <Foundation/Foundation.h>@interface RetainTracker : NSObject@end // RetainTracker@implementation RetainTracker- (id) init{if (self = [super init]) {NSLog (@"init: Retain count of %d.",   [self retainCount]);}return (self);} // init- (void) dealloc{NSLog (@"dealloc called. Bye Bye.");[super dealloc];} // dealloc@end // RetainTrackerint main (int argc, const char * argv[]){    RetainTracker *tracker = [RetainTracker new];    // count: 1    [tracker retain]; // count: 2    NSLog (@"%d", [tracker retainCount]);    [tracker retain]; // count: 3    NSLog (@"%d", [tracker retainCount]);    [tracker release]; // count: 2    NSLog (@"%d", [tracker retainCount]);    [tracker release]; // count: 1    NSLog (@"%d", [tracker retainCount]);    [tracker retain]; // count 2    NSLog (@"%d", [tracker retainCount]);    [tracker release]; // count 1    NSLog (@"%d", [tracker retainCount]);    [tracker release]; // count: 0, dealloc it    return (0);} // main

這是一個講解引用計數器最最簡單的例子,也是最基礎的。

知識點如下:

1.當一個對象調用alloc,new,copy方法時,引用計數器的值會加1。

2.當一個對象調用release方法時,引用計數器的值會減1。

3.當引用計數器變為0的時候,對象自己會調用dealloc方法。

4.要想獲得引用計數器的值,可以調用retainCount方法來獲得。

5.要想自主的將計數器的值加1,可以通過調用retain方法實現。


所以上面的代碼中,用到了new方法來建立對象,計數器會自動加1。調用retain方法也會讓計數器加1。release的時候計數器就會減1。當計數器的值為0的時候,就會調用dealloc方法。所以上面的代碼輸出才會是下面的樣子:


2015-01-28 22:32:54.170 09.01 RetainCount-1[620:23479] init: Retain count of 1.2015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 22015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 32015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 22015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 12015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 22015-01-28 22:32:54.172 09.01 RetainCount-1[620:23479] 12015-01-28 22:32:54.172 09.01 RetainCount-1[620:23479] dealloc called. Bye Bye.Program ended with exit code: 0



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.