【解決問題】[[Class alloc] init]

在函式中定義一個名為 myFraction 的變數如下 (1.)
此行的敘述表示 myFraction 是 Fraction 形態的物件
簡單說就是 myFraction 用來儲存 Fraction 類別的值

下一步我們則會像(2.)把記憶體配置給物件使用
然而通過 alloc 方法配置給記憶體並不代表物件已經初始化
為了能夠讓物件正常使用,則必須加以初始化(3.)
  1. Fraction *myFraction; 
  2. myFraction = [Fraction alloc]; 
  3. myFraction = [myFraction init]
但今天輸出時發現
Output會顯示很多奇怪的東西
欲輸出值也沒有出現
這時Xcode回饋給我以下這樣的訊息:
  • Thread 1: signal SIGABRT
我查了論壇,發現了解決的方法
原來在iOS 5以前還允許使用剛剛的語法
後來則必須簡化成底下這種寫法:
  1. Fraction * myFraction;
  2. myFraction = [[Fraction alloc]init];
將配置和初始化寫在同一行
改寫以後程式就能正常的輸出囉!

當然還有更簡潔的寫法
就連定義物件參數也一起整合:
  1. Fraction *myFraction = [[Fraction alloc]init];
你以為這樣就是最精簡了嗎?
還有更精簡的新方法new,透過new可以取代 alloc和 init 這兩種方法
以達到配置記憶體與初始化的目的:
  1. Fraction *myFraction = [Fraction new];

留言

這個網誌中的熱門文章

[GoPro] 副檔名 LRV 和 THM 到底是什麼?

[Mac] 資料夾半透明無法開啟

[Git] Git rename from index.lock to index failed.