[iOS开发]有效管理
浏览:837 次

在实际的开发过程中,我们通常需要在AppDelegate中监视用户对App的操作并做出响应。由于App的复杂性,AppDelegate中的代码量将非常复杂,非常难以管理,并且容易出现计时错误。我们应该如何有效地管理AppDelegate?
1.我们在AppDelegate中最常做的事情
-(BOOL)App:(UIApplication*)AppdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{
...
返回YES;
}
是的,在创建App时,我们必须在didFinishLaunchingWithOptions方法中创建rootViewController和UIWindow。然而,我们仍然可以在AppDelegate中做很多事情。
2.AppDelegate还能做什么?
-(void)applicationDidEnterBackground:(UIApplication*)App{
//播放视频时,用户通过主页返回手机主界面。我们需要让PlayerManager暂停此方法的播放。
//如果我们的App有下载功能,我们需要在这里实现暂停下载逻辑。
//这种方法需要启用打开屏幕广告的时间。当用户再次返回App时,判断是否需要通过定时显示打开的屏幕广告。
}
-(无效)AppDidBecomeActive:(UIApplication*)App{
//当App再次返回前端时,它有时会发出一些必要的状态请求。
//是否要打开视频播放并再次下载?
//提取登录用户信息,检查您是否在其他地方登录,以及是否更改了密码?
}
-(void)App:(UIApplication*)AppdidReceiveLocalNotification:(非空UILocalNotifion*)通知{
//它被推了。是否要将数字添加到App图标?
}

-(void)AppWillTerminate:(UIApplication*)App{
//该App将很快关闭。保存下载进度
//授权第三方库
//某些状态值需要手动清除
}
我们发现,在AppDelegate中,我们将在一个位置堆叠Manager执行方法的所有条目。这对于代码读取和管理以及bug修改检查非常不便。那么我们如何解决这个问题呢?
我们发现,在AppDelegate中,我们将在一个位置堆叠Manager执行方法的所有条目。这对于代码读取和管理以及bug修改检查非常不便。那么我们如何解决这个问题呢?
3.让我看看你能做什么?
在理论代码结构中,我们将把功能代码封装到与业务逻辑层分离的模块中。例如,我们现在有一个广告模块,它实现了请求广告、缓存广告和用户点击报告等功能。这些都与业务层分离。当我们在任何页面上添加广告功能时,我们都需要实现这些方法。广告模块还需要在AppDelegate中实现一些广告请求和显示逻辑。然后两者之间存在相关性。
4.解决方案来了!
我们可以创建另一个AppEngine类,继承UIApplicationDelegate,在Manager中维护一个数组,并将需要实现UIApplicationDelete的类添加到数组中以进行统一管理。
说话很便宜,给我看代码!
首先,让我们看看最终的实现结果。我们需要通过创建AppEngine类注册来在AppDelegate中实现UIApplicationDelegate函数模块(xxxManager),然后我们需要在AppEngine中实现注册模块调用UIApplicationDelete的逻辑。
@界面AppDelegate()
@结束
@实现AppDelegate
-(BOOL)App:(UIApplication*)AppdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{
[AppEngine registerManager:[xxxManager new]];
[AppEngine registerManager:[xxxManager new]];
[[AppEngine shareEngine]App:AppdidFinishLaunchingWithOptions:launchOptions];
返回YES;

}
创建一个AppEngine类来管理需要实现UIApplicationDelegate方法的所有功能模块。
@接口WQAppEngine:NSObject<UIApplicationDelegate>
+(实例类型)shareEngine;;
/**********************************************************************/
#pragma标记-模块管理
/**********************************************************************/
+(void)registerManager:(id<UIApplicationDelegate>)管理器;
+(void)unregisterManager:(id<UIApplicationDelegate>)管理器;
+(id)managerWithClass:(Class)aClass;
@结束
以didFinishLaunchingWithOptions方法为例,如果函数模块
静态AppEngine*AppEngine=nil;
+(实例类型)shareEngine{
静态dispatch_once_tt;
dispatch_ once(&t^{
appEngine=[[WQAppEngine alloc]init];
});
返回appEngine;
}
/**********************************************************************/

#Pragma标记-模块管理
/********************************************