天天看點

黑馬程式員 記憶體管理之proterty,autorelease

#import <foundation/foundation.h>

@interface person : nsobject

{

       book * _book;

       int _age;

}

/*

   oc對象

   1.@property能制動生成setter和getter方法

   2.retain告訴編譯器自動生成setter裡的retain

   3.atomic:低性能(預設情況下)

      nonatomic:高性能

  */

@property (nonatomic, retain) book *book;

 /*

    非oc對象

   2.assign告訴編譯器自動生成setter的assign設定

   */

@property (nonatomic, assign) int age;

@end

@implementation person

 - (void)dealloc

   {

     [_book release];

     [super dealloc];

   }

@interface book : nsobject

@implementaton book

int main()

  /*

     1.當調用autorelease方法,會傳回對象本身,對象計數器不做任何改變

     2.autorelease會把對象放在自動釋放池裡

     3.當自動釋放池被銷毀時,對釋放池裡的所有對象進行一次release

     4.所有的釋放池都是放在記憶體棧中,采取先進後出原則,把所有的對象放在棧頂

    */

    @autoreleasepool

    {// 建立自動釋放池

        person *p = [[[person alloc] init]

autorelease];

         @autoreleasepool

            {

book *b = [[[book alloc] init] autorelease];

     }// 銷毀自動釋放池

   return 0;

void test()

  person *p = [[person alloc] init];

  book *b1 = [[book alloc] init];

  p.book = b1;

  book *b2 = [[book alloc] init];

  p.book = b2;

  [b2 release];

  [b1 release];

  [p release];

上一篇: jQuery 表單
下一篇: linq查詢