[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标记-模块管理

/********************************************

相关资讯:
APP项目开发流程

APP项目开发流程

查看
软件外包开发过程

软件外包开发过程

查看
软件外包项目开发过程

软件外包项目开发过程

查看
如何找到一家满意的软件项目外包公司

如何找到一家满意的软件项目外包公司

查看
寻找优质APP外包公司

寻找优质APP外包公司

查看