2011-03-14 162 views
0

我已經在Objective-C(用於iPhone)中編寫了幾個小程序,但最終我想用C++編寫我的程序。 (我只是覺得輕鬆了許多。)用C++開發iPhone應用程序?

如果這是真的,我將如何:

  1. 用C管理存儲++? (C++是否需要使用類似版本的命令?)
  2. Intermix C++和Objective-C編碼? (或者,我應該嗎?)
  3. 拿一個C++對象,像一個字符串,並將其轉換爲NSString?

謝謝! Derek

+0

我會強烈建議與標準開發環境,也就是Objective-C的與可可觸摸堅持。用一種看似「更容易」的語言來編寫應用程序可能很誘人,但最好使用環境設計的語言,因爲這種理念是一致的,還有更多的文檔/幫助可供使用,而且您不必擔心轉換任何東西。要編寫一個好的iOS應用程序,您必須接受Apple的哲學,Objective-C是這一理念的一部分。 – 2011-03-14 05:46:58

回答

1
  1. 是的。 C++有一個delete關鍵字,但它只適用於你用new創建的對象(對於慣用的C++代碼,它不是每個對象)。 C++也沒有內置引用計數,只有純粹的所有權。

  2. 如果您使用.mm擴展名創建源文件,它將編譯爲Objective-C++,它可以混合使用Objective-C和C++代碼。

  3. 對於一個字符串,你可以調用std::string::c_str()來得到一個字符串,你可以將其傳入+[NSString stringWithUTF8String:]

我的兩分錢:如果你覺得C++比Objective-C的容易多了,你不知道在C++中的內存管理什麼,你應該儘量花的時間相當數量的學習純C++ ;如果你不知道自己在做什麼,那麼在C++中使用腳就很容易。

+0

感謝您的快速回復John!我會聽從你的建議。 – Derek 2011-03-14 04:17:35

0

用C++管理內存? (C++是否需要使用類似版本的命令?)

C++使用newdelete。特別是,C++程序更喜歡使用範圍綁定資源管理(SBRM)。管理動態分配在使用這些容器時非常容易。但是,引用計數目前尚未構建到該語言中 - 您可以使用boost www.boost.org獲取更高級的指針容器,包括那些提供引用計數的指針容器。

Intermix C++和Objective-C編碼? (或者甚至要這樣呢?)

您可以通過使用擴展.mm.M容易實現,或者通過使用編譯器標誌。請注意,您不應該只將所有內容都作爲objC++來使用 - 這會損害您的構建時間。還要注意有一些限制,包括無法將C++類型作爲objc類型進行分類,反之亦然。另一個重要的標誌是任何理智的C++開發者所能夠實現的,當你在你的objc類中使用C++類型作爲變量時,它會生成C++構造函數/析構函數調用。否則,你只會崩潰,被迫使用pimpl,或者必須手動構建/破壞所有的C++實例(如objc類型的ivars)。這意味着你使用的這些類型都將需要默認的構造函數。您可以混合使用各種語言,如果您喜歡,可以這樣做。關於在蘋果的文檔中混合它們還有一些注意事項,但這些是重要的...哦,並小心隔離你的異常(你也必須用objc做)。

拿一個C++對象,像一個字符串,並將其轉換爲NSString?

看到約翰Calsbeek的迴應

好運