Używam pary funkcji, które używają wskaźnika jako klucza unikatowego. Chcę zadeklarować stały wskaźnik do użycia jako klucz. Jakie jest najbezpieczniejsze i najczystsze podejście do tego?Jaka jest najczystsza metoda deklarowania stałego wskaźnika?
Oto 2 możliwe podejścia, ale oba mają krótkie niedociągnięcia.
Self wskaźnik adresowe:
static const void * const propertyKey = &propertyKey; //... objc_getAssociatedObject(object, propertyKey);
Wada: deklaracja jest długa i przerażające spojrzenie! Może łatwo zmylić kogoś, kto nie wie, do czego służy. Upside: Twardy, gdy zrozumiesz, co robi, jest łatwy w użyciu.
A static const, które powinny zostać odniesione:
static const char propertyKey; //... objc_getAssociatedObject(object, &propertyKey);
Wada: Kiedy używany jest zmienna musi odwoływać się raczej niż po prostu używany, który jest łatwo przegapić (ale kompilator powinien zwrócić na to uwagę jako rodzaj niedopasowania). Jeśli deklaracja zostanie zmodyfikowana w taki sposób, że zostanie przypisana wartość, może to mieć katastrofalne skutki, ponieważ unikalność wskaźnika nie może być dłużej gwarantowana. Upside: Deklaracja łatwiej jest grzebać.
Nie sądzę, że którekolwiek z nich jest od razu oczywiste. Jakieś lepsze sugestie?
Który problem próbujesz rozwiązać? – Sebivor
Pytam, ponieważ wydaje się, że nie ma pożytku z używania wskaźników do zmiennych statycznych jako kluczy dla tablic macierzowych. Dlaczego po prostu nie używać zmiennych statycznych? – Sebivor
@modifiablelvalue Ponieważ 'objc_setAssociatedObject()' wymaga kluczy do wskaźników do 'void'. –