Может ли кто-нибудь сказать мне, какая разница между isKindOfClass:(Class)aClass
и функциями isMemberOfClass:(Class)aClass
? Я знаю, что это нечто маленькое, одно глобальное, а другое - точное совпадение классов, но мне нужно, чтобы кто-то указал, что именно.Разница iPhone SDK между isKindOfClass и isMemberOfClass
ответ
isKindOfClass:
возвращает ДА, если получатель является экземпляром указанного класса или экземпляром любого класса, который наследуется от указанного класса.
isMemberOfClass:
возвращает ДА, если приемник является экземпляром указанного класса.
Большую часть времени вы хотите использовать isKindOfClass:
, чтобы убедиться, что ваш код также работает с подклассами.
NSObject Protocol Reference рассказывает об этих методах.
Пусть
@interface A : NSObject
@end
@interface B : A
@end
...
id b = [[B alloc] init];
затем
[b isKindOfClass:[A class]] == YES;
[b isMemberOfClass:[A class]] == NO;
В принципе, -isMemberOfClass:
верно, если экземпляр именно из указанного класса, в то время как -isKindOfClass:
верно, если экземпляр именно из указанного класса, или если один из предков экземпляра относится к указанному классу.
-isMemberOfClass:
редко используется.
Но если у вас есть массив подзаголовков, которые включают UIViews и UISegmentedControl, и вы зацикливаетесь на них и устанавливаете условие на класс, вам нужно будет использовать isMemberOfClas UIView и isMemberOfClass UISegmentedControl, чтобы отличить их, нет? isKindOfClass увидит UISegmentedControl как UIView. – PruitIgoe
@Pruitlgoe это очень верно. Вы можете использовать isKindOfClass: [класс UIView], чтобы гарантировать, что все объекты, с которыми вы работаете, - это UIViews, но вам нужно будет использовать isMemberOfClass: [класс UIView] и/или isMemberOfClass: [UISegmentedControl class] внутри некоторого условного оператора, чтобы указать какую-либо отдельную реализацию представлений, основанных на их непосредственном классе экземпляров –
isKindOfClass:
указывает, наследует ли объект из заданного классаisMemberOfClass:
указывает объект , является ли экземпляр данного класса.
[[NSMutableData data] isKindOfClass:[NSData class]]; // YES
[[NSMutableData data] isMemberOfClass:[NSData class]]; // NO
@ Durga, если это ответит на ваш вопрос, вы должны его принять. Узнайте больше о ставке приема здесь: http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work – poncha
isKindOfClass: Возвращает логическое значение, указывающее, является ли приемником является экземпляром данного класса или экземпляр любого класса , который наследует от этого класса.
isMemberOfClass: Возвращает логическое значение, указывающее, является ли приемником является экземпляром данного класса.
isKindOfClass-> возвращает YES, когда объект является экземпляром этого класса или экземпляра класса, который унаследован от него.
isMemberOfClass: return YES, когда объект является экземпляром этого класса, но нет в случае: экземпляр класса, который унаследован от него.
пример достаточно хорош в ответе jtbandes.
Из-за кластеров классов isMemberOfClass может дать вам ответ, которого вы не ожидаете.Во многих случаях ваш лучший выбор, скорее всего, будет (BOOL) соответствуетToProtocol: (SEL) aSelector или - (BOOL) соответствуетToProtocol: (Protocol *) aProtocol. I.e, лучше проверить их, если они могут ответить на ваши потребности, а не тестировать класс/подкласс.
См яблоко документ для класса NSObject и протокола:
- 1. NSDictionary (__NSDictionaryI) isMemberOfClass: isKindOfCLass: разница
- 2. Почему isKindOfClass и isMemberOfClass плохо работают с NSString и NSMutableString?
- 3. isMemberOfClass in Swift
- 4. разница между SDK и IDE
- 5. iPhone SDK: в чем разница между loadView и viewDidLoad?
- 6. iPhone SDK: какая разница между #import и @class?
- 7. разница между iPhone SDK 3.x и 4.x
- 8. Цель c isKindOfClass missunderstanding?
- 9. iPhone - isKindOfClass генерирует ошибку компоновщика
- 10. Разница между Windows SDK
- 11. использование isMemberOfClass; return false
- 12. iPhone и iPad iOS 6 SDK разница?
- 13. isMemberOfClass против сравнения классов с ==
- 14. разница между ионными и андроидными sdk
- 15. Какая разница между PDK и SDK?
- 16. Разница между IOS SDK и Framework?
- 17. разница между MPL и PayPal iOS SDK
- 18. Разница между SDK и NDK в android
- 19. Разница между окнами мобильного SDK и DTK
- 20. В чем разница между SDK и Application?
- 21. Xcode iPhone - базовый SDK, активная разница в SDK?
- 22. Разница между штрихом и заполнением?
- 23. isKindOfClass и NSStringFromClass не согласны с UIApplicationDelegate
- 24. В чем разница между Nokia Qt SDK и Qt SDK?
- 25. В чем разница между Creative SDK и Aviary SDK?
- 26. Разница между iPhone Simulator и Android Emulator
- 27. Разница между quartz2d на iphone и mac
- 28. isMemberOfClass problem
- 29. Iphone SDK - Общение между объектами
- 30. iphone sdk общаться между потоком
Можете ли вы прочистить под сомнение? 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