[英]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 ++對象的好地方。
線程:
線程的其他選項包括:
我個人使用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 ++中編寫delete
, delete[]
或free
,則說明您沒有正確使用智能指針-它們幾乎與ARC一樣簡單,只是提供了更大的靈活性。
您可能還需要研究CLANG_WARN_OBJCPP_ARC_ABI
。
ARC的不同之處還在於,當將程序編譯為ObjC ++時,在從引發的異常中解散期間,本地強ObjC引用將為-release
d(當編譯為ObjC + ARC時不是這種情況)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.