Mam problem z zadaniem przechowywania CGGradientRef w NSMutableArray. Co muszę zrobić, aby go zapisać w tablicy i co go rozpakować.Jak przechowywać CGGradientRef w NSMutableArray
Dzięki.
Mam problem z zadaniem przechowywania CGGradientRef w NSMutableArray. Co muszę zrobić, aby go zapisać w tablicy i co go rozpakować.Jak przechowywać CGGradientRef w NSMutableArray
Dzięki.
Nie musisz niczego owijać. Po prostu wyślij go do id
i dodaj do tablicy. Możesz to zrobić dla dowolnego typu CoreFoundation pochodzącego z CFType (luźno wszystko kończące się na "Ref").
Alternatywnie można rzucić NSMutableArray * do CFMutableArrayRef i wywołać CFArrayAppendValue(). To już nie jest bezpieczne; wywołuje zwrotne wezwania/zwolnienia określone podczas tworzenia tablicy. (Wyjątkiem wyjątku jest - [NSDictionary setValue: forKey:], który kopiuje klucze, podczas gdy odpowiednia funkcja CFDictionary nie. Czasami dobrze jest mieć słownik wpisany przez "zmienny" obiekt (np. NSURLConnection, z danymi - tak -far jako wartości), jesteś bezpieczny, o ile nie naruszysz wymogu, że hasz się nie zmienia).
Typy CoreFoundation są typami podobnymi do OO, które mogą być używane w "zwykłym" C. Używając jakiejś sprytnej magii (Apple może to zrobić, ponieważ pisze zarówno środowiska wykonawcze CF i ObjC), wystąpienia typów takich jak NSString, NSArray i NSDictionary są (domyślnie) "naprawdę" instancjami CFString, CFArray i CFDictionary. Typy CF są w hierarchii typów, której źródłem jest CFType; godne uwagi metody to CFRetain, CFRelease, CFEqual, CFHash i CFCopyDescription. Te luźno odpowiadają -retain, -release, -isEqual :, -hash i -description (poza tym - opis jest dodatkowo autoreleased i mają one inną obsługę NULL/zero). Apple nazywa to "bezpłatnym mostowaniem" lub "wymiennymi typami danych" (artykuł IDT nie jest już dostępny w Mac Dev Center). Ridiculousfish ma dobry artykuł o nazwie "Bridge".
Oznacza to, że można w większości przypadków traktować typy CF tak, jakby były obiektami Celu-C. Apple nie uczyniło tego szczególnie oczywistym, ale oprócz wszystkich wzmianek o "darmowym pomoście", jest kilka rzeczy, które zakładają, że są wymienne.
@property (nonatomic, retain) __attribute__((NSObject)) ABAddressBookRef foo;
co oznacza "wysłanie go -retain i -release tak, jakby była instancją Objective-C".id
, ale jedyną udokumentowaną rzeczą, którą obsługuje, jest CGImageRef (obsługuje również CABackingStore, do czego służy polecenie -drawRect: draws).Dodatkowe zabawne rzeczy, które możesz zrobić, to zdefiniowanie CFAutorelease.
Dziękuję, dziękuję odpowiedzieć! – Cyprian