Как уже отмечали другие, полагаться на имя частного класса - плохая идея.Если вы ищете один конкретный подкласс, вы можете просто явно проверить этот класс.
[notification isMemberOfClass:[MyNotificationSubclass class]];
Вы можете использовать несколько операторов для проверки нескольких подклассов, но это будет немного загромождено.Этот метод также требует изменений каждый раз, когда вы добавляете новый класс для поиска.Может быть лучше определить свойство только для чтения, которое указывает, поддерживает ли уведомление функцию, которую вы ищете, так что вы полагаетесь не столько на класс, сколько на его возможности.Вы можете использовать категорию в NSNotification, которая просто возвращает NO
для этого свойства, и любые подклассы, имеющие функцию, будут переопределять метод для возврата YES
.
@interface NSNotification (MyFeature)
@property (readonly) BOOL hasMyFeature;
@end
@implementation NSNotification (MyFeature)
- (BOOL)hasMyFeature {
return NO;
}
@end
В подклассах, которые его поддерживают:
- (BOOL)hasMyFeature {
return YES;
}
- (void)performMyFeature {
...
}
Это также позволит вам изменить возможность включения функции уведомления, изменив флаг, возвращаемый для hasMyFeature
, и ваш проверочный код будет просто:
if(notification.hasMyFeature) [notification performMyFeature];