да, это потерпит крах.Но есть способы предотвратить это.
Вчера я сделал нечто подобное с Event Kit.
Я создал свой собственный объект EventHandler, который возвращает nil в init, если нет Event Kit.Вызовы nil совершенно законны, поэтому этот класс абстракции предотвращает сбои на iOS3.И мне не нужно выполнять проверку NSClassFromString для каждого звонка, который я делаю.
Из-за отсутствия устройств iOS3 я еще не смог проверить это, но я надеюсь, что он будет работать.
- (id)init {
self = [super init];
if (self) {
Class eventKitClass = NSClassFromString(@"EKEventStore");
if(eventKitClass) {
// iOS4++
// more init
}
else {
// iOS3
[self release];
return nil;
}
}
return self;
}
Вы должны ослабить связь с фреймворком Event Kit.[Targets / YourTarget / Get Info / General]
РЕДАКТИРОВАТЬ: Я неправильно прочитал ваш вопрос, вы не спрашиваете о наборе событий.Но этот подход работает и для структуры адресной книги.
EDIT2: Поскольку адресная книга была доступна с iOS 2.0, мой подход для вас бесполезен.
Вы должны использовать
if ([foo respondsToSelector:@selector(doSomething:)]) {
[foo doSomething:bar];
}
для каждого вызова, который выможет не присутствовать в iOS3.Как сказал другой ответчик.