Bir Objective-C++ projesinde çalışmaya başlıyorum, iki dilin sentezinin, herhangi bir ağır iş tasarımı yapmadan önce nasıl hissettirdiğini hissediyorum. Otomatik Referans Sayımı'nın C++ ile nasıl entegre edildiğine çok meraklıyım: NSObjects
için akıllı işaretleyicilerin eşdeğerini, STL konteynerlerinde düzgün bir şekilde tutma/serbest bırakma işlemine denk geliyoruz (bkz. David Chisnall'ın makalesi, http://www.informit.com/articles/article.aspx?p=1745876&seqNum=3).NSString anahtar olarak nasıl kullanılır Objective-C++ std :: map
STL haritasını, NSStrings
'dan C++ değerlerine typesafe eşleştirmesi olarak kullanmak istiyorum. Bu eşleme düzgün bellek yönetimini ele alır, ARC ile
std::map<NSString*, MyType> mapping
olarak bir eşleme bildirebilirsiniz. Ancak NSString
değer semantiğine uygun şekilde uymuyor çünkü -[NSString compare:]
yerine işaretçi karşılaştırmalarını kullanıyor.
İşaretçi karşılaştırması yerine dize karşılaştırması kullanmak için bir STL haritası elde etmenin en iyi yolu nedir?
std::less<NSString*>
konusunda uzmanlaşmalı mıyım?
std::map<NSString*, MyType, MyCompare>
gibi açık bir karşılaştırıcı mı bildirmeliyim?
operator<
'u uygulayan bir akıllı işaretçide NSString*
anahtarlarını sarmalı mıyım?
En iyi nasıl tanımlarsınız? İstenen sonuç hız belleği nedir? – madmik3
İlginç. ARC ile objc işaretçilerinin çok kolay işleyeceği hakkında hiçbir fikrim yoktu. Chisnall'ın makalesine bakarak, bunun çalışması için harita beyannamenize __weak veya __strong eklemeniz gerekecek. Aksi halde onlar POD'lar ve işe yaramaz. (Karşılaştırıcıya nadiren baktığım ve sonradan unuttuğum için karşılaştırıcıya bir cevabım yok. Verdiğin sırada denemeliyim.) – smparkes
Eğer işaretçiler güçlü ise, onları işaretlemeniz gerekmez. Sadece zayıflarsa. Her neyse, açık bir karşılaştırıcıyla giderdim. – bames53