Почему -isMemberOfClass:не работаешь здесь?
-
12-09-2019 - |
Вопрос
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3];
if ([arr isMemberOfClass:[NSMutableArray class]]) {
NSLog(@"YEP!!");
} else {
NSLog(@"NO!!");
}
Я всегда получаю "НЕТ!!" в консоли.Я пробовал с Array, NSNumber, NSString.Похоже, что все они не работают.Это странно.Как я понял из документации, этот метод должен возвращать YES, если я тестирую agains класс объекта, который является предметом тестирования.Я использую Foundation.h, а не Core Foundation (если это вообще имеет какое-то значение).
Решение
Вам нужно использовать isKindOfClass:
или respondsToSelector:
как NSArray
и подобными являются кластеры классов - на самом деле вы получаете подклассы при их создании.Видишь этот ответ для некоторых интересных моментов по этому поводу.
Другие советы
Когда вы создаете массив с помощью [NSMutableArray arrayWithCapacity:]
, объект, который вы получаете, на самом деле является членом некоторого конкретного подкласса NSMutableArray.NSMutableArray существует только на мгновение в процессе создания конкретного экземпляра.
-isMemberOfClass:
возвращает значение true, если получатель isa
указатель равен данному классу. -isKindOfClass:
возвращает true, если получатель является членом данного класса или любого из его подклассов.
вы пробовали isKindOfClass вместо isMemberOfClass?