Objective-C基礎學習筆記——對象初始化

來源:互聯網
上載者:User

標籤:

obj中建立新對象有兩種方式:[classname new]和[[classname alloc] init]。兩種方法等價,Cocoa慣例是使用alloc和init。

 

1.指派至:

      allocation是一個新對象誕生過程,從OS獲得一塊記憶體並指定為存放對象的執行個體變數的位置。同時alloc方法還將這塊記憶體地區全部初始化為0。BOOL初始化為NO,int初始化為0,float初始化為0.0,指標初始化為nil。

      然後init初始化之後才能使用,C++和Java中使用建構函式在單次操作中執行對象的分配和初始化,Objective-C將兩個操作分開。

2.Car *car = [[Car alloc] init];

      -(id)init

      {

         if(self=[super init])

        {

          engine=[Engine new];

          tires[0]=[Tire new];

        }

      }

      -(id)init傳回值,id可表不同的對象。init可以接受參數並可能判斷返回另外一個類的對象可能更合適。比如從一個很長的字串生產一個新的字串。

      if(self=[super init]) 首先的是[super init],使超類完成自己的初始化工作。使超類執行所需任何操作,以便對象能響應訊息並處理保留計數器。執行個體變數所在的記憶體位置到隱藏的self的距離是固定的,如果init方法返回一個新對象,則需要更新self,以便之後的執行個體變數的引用能映射到正確的記憶體位置,self=[super init]賦值就是這個作用,隻影響init方法中self的值,不影響init範圍以外的內容。初始化一個對象出錯時,返回nil。if(self=[super init])典型的C風格,一般不採用self=[super init] if(self)...

      在car的初始化中給執行個體變數賦值並建立car所需要的engine和tires對象。可以一次建立所有所需要的對象,使得Car類可以[[Car alloc] init]之後可以立即使用;也可以先為engine對象和tire對象預留位置,等調用者需要的時候再建立對象,惰性求值(lazy evaluation)。

3.便利初始化函數。

      為了減少工作麻煩,很多個物件有多個init開頭的方法。NSString類為例子:

      NSString *emptyString = [[NSString alloc] init];

      NSString *str = [[NSString alloc] initWithFormat:@"%d or %d",2,33];

      NSString *str = [[NSString alloc] initWithContentsOfFile:@"/tmp/1.txt"];

      Xcode提供的自動匹配功能非常使用,輸入init按esc鍵後會顯示所有的可以匹配的函數。

      所有使用alloc,copy,new方法建立的對象,只用完成之後都需要釋放。[str release];

      NSString *str = [NSString stringWithFormat:@"%.1f",20.0];  str這裡是可以自動釋放的,當自動釋放池銷毀時,該字串對象也被清理。

      一般在main函數首先建立自動釋放池,為自動釋放的對象在等待自動釋放池被銷毀時提供容身之所:

      NSAutoreleasePool *pool;

      pool = [[NSAutoreleasePool alloc] init];

      在程式結束時,pool釋放,並向池中的所有對象發送release訊息:

      [pool release];

4.指定初始函數

      我們可以自己編寫方便的便利初始化函數,並且可以編寫多個。但必須指定某個初始化方法為指定初始化函數,該類的所有初始化方法使用指定初始化函數執行初始化操作。子類使用其超類的指定初始化函數實現超類的初始化。如果構造了一個初始化函數,需要在自己的指定初始化函數中調用超類的指定初始化函數。如果不指定初始化函數,那麼該類子類可能需要重寫所有的它的初始化函數。

Objective-C基礎學習筆記——對象初始化

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.