Birisi "opak tip" ne hakkında iyi bir açıklama var mı? Bu terimi CFBundleRef
bağlamında gördüm, "CFBundleRef opak tip" diyorlardı. Bu, okuyan bir tip mi?"Opak tip" terimi "CFBundleRef opak tip" bağlamında ne anlama gelir?
cevap
"Opak tür", struct
veya class
için tam tanıma sahip olmadığınız bir türüdür. Eğer doğrudan bir şey yapmak
// forward declaration of struct in C, C++ and Objective-C
struct Foo;
// forward declaration of class in C++:
class Bar;
// forward declaration of class in Objective-C:
@class Baz;
derleyici izin için yeterli bilgiye sahip değildir: C, C++ ve Objective-C, bir tür ileri bildirimi kullanarak daha sonra belirlenecektir derleyici söyleyebilir struct
veya class
işaretçilerine bildirme dışında, ancak bu genellikle yapmanız gereken tek şeydir. Bu, kütüphane ve çerçeve yaratıcılarının uygulama ayrıntılarını gizlemesine izin verir. Bir kitaplığın veya çerçevenin kullanıcıları, daha sonra bildirilen ileri düzey bir struct
veya class
örneklerini oluşturmak, değiştirmek ve yok etmek için yardımcı işlevlerini çağırır. Örneğin, bir çerçeve yaratıcısı struct Foo
için bu işlevleri oluşturabilirsiniz: Çekirdek Vakfı çerçevesinin bir parçası olarak
struct Foo *createFoo(void);
void addNumberToFoo(struct Foo *foo, int number);
void destroyFoo(struct Foo *foo);
Apple opak türleri üzerinden C programcıların mevcut NSString
, NSArray
ve NSBundle
gibi yaygın Objective-C sınıfları yapar. C programcılar, bu Objective-C sınıflarının örneklerini oluşturmak, değiştirmek ve yok etmek için işaretçi ve yardımcı işlevler kullanır. Apple bu "ücretsiz ücretsiz köprüleme" diyor. Ortak bir adlandırma kuralı izlerler: "CF" önek + sınıf adı + "Ref" soneki, "CF" nin "Core Foundation" anlamına geldiği ve "Ref" "Reference" için kısa, yani bir işaretçi anlamına gelir.
Opak tür, alt düzeydeki türleri "saran" bir türdür ve genellikle temel uygulama karmaşık olduğunda veya kullanıcının yalnızca iç işleyiş hakkında bilgi sahibi olması gerekmediğinde kullanılır. o, bir karakter dizisi sarar vb uzunluğunu, resmin şifrelemesini korur çünkü
Örneğin, CFString opak türüdür, ancak doğrudan izin vermez: Elma burada opak türleri üzerinde iyi bir sayfası vardır kullanıcı bu değerlere erişir. Daha ziyade, iç alanlara erişen ya da bunları manipüle eden ve kullanıcıya ilgili bilgiyi döndüren yöntemler sağlar.
Gelecekte bildirilen bir yapıdır. Örneğin:
typedef struct CFBundle *CFBundleRef;
"yapı CFBundle" gerçek tanımı olmadan, kod CFBundleRef pointer içinde herhangi erişemez. Bu opak.
çok etkileyici iyi cevap! Teşekkürler!! – Thanks
bunlarla ilgili bir soru daha var: Çerçevelerin yaratıcıları bu yardımcı işlevleri sağlıyor mu, yoksa kullanıcılar bunları mı yapıyor? – Thanks
Çerçeve yaratıcıları bunları sağlar. –