Я не уверен, что вы подразумеваете под "вызывающим абонентом" в "когда вызывающий абонент исчез". Вот как вы можете получить доступ к делегату приложения из любого места.
[UIApplication sharedApplication].delegate;
Если вам нужно вызывать методы, уникальные для вашего конкретного приложения, вам нужно импортировать его и привести.
#import "MyAppDelegate.h"
// ...
MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
Обновление:
Чтобы вызвать собственные методы библиотеки для любого делегата приложения, используйте протокол.
// The app delegate in your library users app
#import "YourFancyLibrary.h"
@interface MyAppDelegate : NSObject <UIApplicationDelegate, YourFancyLibraryDelegate>
// In YourFancyLibrary.h, declare that protocol
@protocol YourFancyLibraryDelegate
- (void)myFancyMethod;
@end
// Refer to it in the guts of your library.
id<YourFancyLibraryDelegate> delegate = [UIApplication sharedApplication].delegate;
if (![delegate conformsToProtocol:@protocol(YourFancyLibraryDelegate)]) return;
if (![delegate respondsToSelector:@selector(myFancyMethod)]) return;
[delegate myFancyMethod];
Это сделает ваш API понятным, когда вы укажете, какие методы должны использовать пользователи вашей библиотеки, и является хорошим решением, поскольку позволяет проверять время компиляции, а не полагаться на динамическую отправку сообщений во время выполнения.
Вы также можете пропустить протокол и напрямую вызывать методы для него.
id appDelegate = [UIApplication sharedApplication].delegate;
SEL methodToCall = @selector(someMethod);
if ([appDelegate respondsToSelector:methodToCall]) {
[appDelegate performSelector:methodToCall];
}