簡體   English   中英

混合使用Objective-C和Boost / C ++

[英]Mixing Objective-C and boost/C++

我終於有我通過CLI工作圖搜索的一個非常基本的版本,但我發現自己在我需要重構所有的代碼的位置。 因為我在mac上進行這個編程,所以我在考慮使用Cocoa作為GUI,然后將我的C ++函數作為workhorses使用。 這只是一個臨時修復,因為最終我希望能夠在linux盒/集群上運行我的所有代碼。 是我關於實現的最后一個問題,我確實讓它在boost中工作,滾動我自己的圖形函數(現在)。

所以這就是我的想法:為圖形本身構建C ++類,並為我想要計算的量建立單獨的函數或方法。 是我能找到的最新描述,它涉及混合Objective-C和C ++。 但我想知道:

在Xcode中編譯我的C ++代碼是否會得到優化? 重點是我希望C ++代碼能夠針對快速內存訪問,多線程進行全面優化,並且可以訪問boost庫。 然后,我可以將C ++類封裝在一個包裝ObjectiveC類中。 為此,我基本上會有2個類,對嗎? C ++類包含.h和.cpp文件並包含boost庫,然后是帶有.h和.mm文件的ObjC類包裝器,其中.h不包含對C ++類的任何引用,我使用include in .mm文件。 然后我可以使用我正常的MVC設計和Objective C的GUI實現。只要我給dealloc命令提供核心C ++類的能力,我不必擔心內存管理? ARC是否也適用於C ++,它是否能讓OSX能夠內存管理和清理我的C ++代碼?

我懷疑如果我想要線程化,我會選擇增強線程,因為GCD的編碼會使它特定於平台(盡管現在,它只會運行)。 我認為,就目前而言,我將遠離核心數據,因為我只是通過解析文本文件來創建我的圖形。

在Xcode中編譯我的C ++代碼是否會得到優化?

編譯代碼不是Xcode,而是編譯器(GCC或clang),如果您使用適當的編譯器標志請求它,它將優化您的代碼。 我看不到C ++和Objective-C的混合會使編譯器無法優化...

只要我給dealloc命令提供核心C ++類的能力,我不必擔心內存管理?

特別? 您仍然仍然需要照常管理C ++和Objective-C對象的內存。

ARC也適用於C ++嗎?

不,不是,這是Objective-C的功能。 C ++甚至沒有引用計數(我希望它有...)。

我同意H2CO3所說的一切(除了關於引用計數的挑剔)。

還要注意Daniel Sefton 創建了一篇關於如何為OSX和iOS 編譯Boost的好文章

另外,是的,-dealloc是刪除C ++對象的好地方。

線程:

  • 如果您只希望定位OSX和iOS,C ++ 11具有本機線程支持,Android尚不支持此功能。

線程的其他選項包括:

  • Posix線程(又名pthreads)
  • 增強線程
  • Poco線

我個人使用Poco。

在Xcode中編譯我的C ++代碼是否會得到優化?

是。

為此,我基本上會有2個類,對嗎? C ++類包含.h和.cpp文件並包含boost庫,然后是帶有.h和.mm文件的ObjC類包裝器,其中.h不包含對C ++類的任何引用,我使用include in .mm文件。

正確。

只要我給dealloc命令提供核心C ++類的能力,我不必擔心內存管理?

是的,當您聲明C ++ ivar時,將在ObjC對象生存期內的適當時間調用C ++對象的默認構造函數和析構函數。

像普通的C ++一樣,您只使用值或智能指針,而不是C ++ ivars的原始指針,並且對對象的生存期幾乎沒有其他干預。 如果ARC被啟用,編譯器將不會將ObjC引用計數應用於您的C ++類型(畢竟,嚴格不對C ++對象進行引用計數)。

ARC是否也適用於C ++,它是否能讓OSX能夠內存管理和清理我的C ++代碼?

ARC僅適用於ObjC類型。 它對C ++甚至C類型/分配都沒有任何作用。 只需為您的C ++和C分配/類型使用智能指針或一些適當的C ++替代品(即std::vector )。 如果發現自己需要經常在C ++中編寫deletedelete[]free ,則說明您沒有正確使用智能指針-它們幾乎與ARC一樣簡單,只是提供了更大的靈活性。

您可能還需要研究CLANG_WARN_OBJCPP_ARC_ABI

ARC的不同之處還在於,當將程序編譯為ObjC ++時,在從引發的異常中解散期間,本地強ObjC引用將為-release d(當編譯為ObjC + ARC時不是這種情況)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM