ios:在app delegate上动态加载函数

时间:2014-04-04 02:17:58

标签: ios objective-c dynamically-generated

在IOS中是否可以在运行时动态加载/创建类的函数?

我特别想到在运行时添加应用委托代表的示例,但我不确定它在语言中是否可行?

例如,这用于推送通知,但是它可以在运行时由幕后动态添加吗?

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    ....
}

作为替代方案,它可以简单地在框架中定义,在app委托文件之外,但仍然是app委托逻辑的一部分吗?

2 个答案:

答案 0 :(得分:1)

两者都是选择。

动态添加方法是通过名为class_addMethod的C函数。您甚至可以更改现有方法(并且仍然使用原始方法!),这称为方法调配。您可以阅读Apple documentation或google了解其他示例。请注意,您需要在程序中至少触摸您的库才能加载它(如果您在课程的+initialize方法中进行调整),并且让用户初始化您的库可能是最简单的类似于[MYLibrary applicationLaunchedWithDelegate:self launchOptions:launchOptions]

的内容

如果您知道需要添加方法的课程,可以使用category

答案 1 :(得分:1)

你可以将你的自己作为app委托并绕过所有收到的委托给旧的委托以便向后兼容。这是一个伪代码。

1)默认我们有这样的接线:

  

ios - > appdelegate.m

现在你需要把自己放在中间,如:

  

ios - >框架 - > appdelegate.m

2)所以你可以通过将旧委托设置为另一个变量来实现,例如: (在您的框架委托中)

  

self.oldDelegate = [UIApplication sharedApplication] .delegate;

并将自己设置为应用程序委托:

  

[[UIApplication sharedApplication] setDelagate:self];

3)为了向后兼容,您需要绕过所有代理到oldDeleagete

4)警告:这是伪代码给你的想法,但记住你需要照顾你的应用程序的多线程可能是有像你这样的另一个框架,两个都在改变应用程序代表,但会出错 oldDelegate 和你的布线将无法正常工作。所以要更加注意这些东西。look at this