Я столкнулся с каким-то странным поведением в приложении iPhone Objective-C.
Я использую некоторый код для проверки объекта:
if (!class_conformsToProtocol([someVar someFunctionThatReturnsAClass], @protocol(MyProtocol)))
[NSException raise:@"Invalid Argument" format:@"The variables returned by 'someFunctionThatReturnsAClass' Must conform to the 'myProtocol' protocol in this case."];
Как ни странно, когда у меня есть класс, который выглядит так:
@interface BaseClass : NSObject<MyProtocol>
...
@end
@interface SubClass : BaseClass
...
@end
И когда я вызываю этот фрагмент: class_conformsToProtocol([SubClass class], @protocol(MyProtocol))
, он возвращает NO
.
Кроме того, этот код не работает:
class_conformsToProtocol([NSString class], @protocol(NSObject)); // also returns NO
Пока этот код возвращает YES
:
[NSString conformsToProtocol:@protocol(NSObject)];
Есть ли что-нибудь, что мне не хватает в документах? Или это какая-то ошибка? (Я на iOS 4.2, если это имеет значение).