Czy ktoś może mi powiedzieć, jaka jest różnica między funkcjami isKindOfClass:(Class)aClass
i isMemberOfClass:(Class)aClass
? Wiem, że jest to coś małego, jeden jest globalny, podczas gdy drugi jest dokładnym meczem klasowym, ale potrzebuję kogoś, kto by określił, co jest mi potrzebne.Różnica iPhone SDK między isKindOfClass i isMemberOfClass
Odpowiedz
isKindOfClass:
zwraca TAK, jeśli odbiorca jest instancją określonej klasy lub instancją dowolnej klasy dziedziczącej z określonej klasy.
isMemberOfClass:
zwraca TAK, jeśli odbiorca jest wystąpieniem określonej klasy.
Zazwyczaj używa się isKindOfClass:
, aby upewnić się, że twój kod działa również z podklasami.
The NSObject Protocol Reference mówi trochę więcej o tych metodach.
Załóżmy
@interface A : NSObject
@end
@interface B : A
@end
...
id b = [[B alloc] init];
następnie
[b isKindOfClass:[A class]] == YES;
[b isMemberOfClass:[A class]] == NO;
Zasadniczo -isMemberOfClass:
jest prawdą, jeśli instancja jest dokładnie określonej klasy, natomiast -isKindOfClass:
jest prawdą, jeśli instancja jest dokładnie określonej klasy lub jeśli jeden z przodków instancji jest określonej klasy.
-isMemberOfClass:
jest rzadko używany.
Ale jeśli masz tablicę subviews, które zawierają UIViews i UISegmentedControl, a ty przełączyłeś je i ustawiłeś warunek dla klasy, musisz użyć isMemberOfClas UIView i isMemberOfClass UISegmentedControl, aby je rozróżnić, nie? isKindOfClass zobaczy UISegmentedControl jako UIView. – PruitIgoe
@Pruitlgoe to jest bardzo prawdziwe. Możesz użyć isKindOfClass: [klasa UIView], aby upewnić się, że wszystkie obiekty, z którymi masz do czynienia, to UIViews, ale musisz użyć isMemberOfClass: [klasa UIView] i/lub isMemberOfClass: [klasa UISegmentedControl] w pewnym warunkowym komunikacie, aby wskazać jakąkolwiek odrębną implementację z widoków opartych na ich bezpośredniej instancji klasy –
isKindOfClass:
wskazuje, czy obiekt dziedziczy z danej klasyisMemberOfClass:
wskazuje, czy obiekt jest wystąpienie danej klasy.
[[NSMutableData data] isKindOfClass:[NSData class]]; // YES
[[NSMutableData data] isMemberOfClass:[NSData class]]; // NO
@Durga, jeśli to odpowiada na twoje pytanie, powinieneś to zaakceptować. Przeczytaj więcej o akceptowaniu kursu tutaj: http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work – poncha
isKindOfClass: zwraca wartość logiczną, która wskazuje, czy odbiornik jest wystąpienie określonej klasy lub wystąpienie jakiejkolwiek klasy która dziedziczy z tej klasy.
isMemberOfClass: Zwraca wartość logiczną wskazującą, czy odbiornik jest instancją danej klasy.
isKindOfClass-> return YES, gdy obiekt jest instancją tej klasy lub instancji klasy, która jest z niego dziedziczona.
isMemberOfClass: return YES, gdy obiekt jest instancją tej klasy, ale nie w przypadku: instancja klasy, która jest z niej dziedziczona.
przykład jest wystarczająco dobry w odpowiedzi jtbandes.
Z powodu klastrów klas, isMemberOfClass może dać odpowiedź, której możesz nie oczekiwać.W wielu przypadkach najlepszym wyborem będzie - (BOOL) conformsToProtocol: (SEL) aSelector lub - (BOOL) conformsToProtocol: (Protocol *) aProtocol. Lepiej przetestować te, jeśli mogą one odpowiedzieć na twoje potrzeby, a nie na testowanie klasy/podklasy.
See jabłko doc dla klasy NSObject i protokołu:
- 1. isMemberOfClass w Swift
- 2. Różnica między SDK i IDE
- 3. Różnica między obrysem i wypełnieniem?
- 4. className i wiadomości isKindOfClass wysyłane do obiektu
- 5. iPhone SDK: Dealloc vs. Release?
- 6. Różnica między viewDidAppear, viewDidLoad w iPhone/iOS?
- 7. Jaka jest różnica między identyfikatorem UDID urządzenia iPhone, urządzeniem iPhone i urządzeniem Token urządzenia iPhone?
- 8. Różnica między NSLog i DLog
- 9. iPhone: Różnica między zerową a zerową i prawdziwą vs prawdziwą
- 10. różnica między iPhone AES (objective-c) i Java
- 11. Różne między NSData i NSMutableData w iPhone
- 12. Różnice między JDK i Java SDK
- 13. GoogleAdMobAds w iphone sdk
- 14. iPhone SDK pytanie audioSession
- 15. iPhone SDK wykryć WiFi i operatora sieci
- 16. Stare Iphone sdk wersje
- 17. Różnica między unwrapObservable i()
- 18. Różnica między "**/* /" i "** /"?
- 19. Różnica między | = i^= css
- 20. Composer.phar różnica między | i ||
- 21. Różnica między "% ~ dp0" i ". \"?
- 22. Różnica między ". +" I ". +?"
- 23. MySQL: Różnica między ",", "i"
- 24. Różnica między (++ i) oraz (i ++)
- 25. Jaka jest różnica między SQLite i SQL
- 26. Różnica między android.support.v7.app.AlertController.RecycleListView i android.support.v7.widget.RecyclerView
- 27. iPhone SDK - ustawienia ładowania/zapisywania
- 28. zaszyfrować plik na iphone-sdk
- 29. iPhone SDK NSString do NSDate
- 30. Różnica kręgosłupa Różnica między CompositeView i CollectionView?
Czy należy oczyścić poniżej wątpliwości? if ([lbl.textColor isMemberOfClass: [UIColor class]]) {// Not Memeber NSLog (@ "Not Memeber"); } else { NSLog (@ "Not Memeber"); } if ([imgView.image isMemberOfClass: [UIImage class]]) {// Memeber NSLog (@ "Memeber"); } else { NSLog (@ "Not Memeber"); } – Nikkie