close

最近剛開始學Objective-C剛好碰到Memory Management的問題,網路上有許多教學,我稍微將他們用圖匯整一下:

Objective-C Memory Management:

[retain]

   retatin count = 1            retatin count = 2        

                   after b = [ a retain ];

       a →             →       a →

                                                      ↑

                                                      b

[release]

   retatin count = 2     retatin count = 1      retatin count = 0

                  after  [ a release ];    after  [ a release ];

       a → □      →        □               auto execute dealloc

                 ↑                        ↑

                 b                        b

 

[copy]
   a retatin count = 1       a retatin count = 1    b retatin count = 1

                            after b = [ a copy ];

       a →                  a → □            b →


[autorelease]


a = [[className alloc] init autorelease];

在autorelease pool中做個標記,若pool要release時,則會把每個已標記的對象release一次,如果某對象retain count > 1,則該對象還是沒有被銷毀。

arrow
arrow

    Wilson 發表在 痞客邦 留言(0) 人氣()