首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

大家的程序框架都如何样的

2012-07-26 
大家的程序框架都怎么样的啊兄弟们,大家的程序框架都怎么样的啊??我的是这样的:BusinessControllerBusines

大家的程序框架都怎么样的啊

兄弟们,大家的程序框架都怎么样的啊?

?

我的是这样的:

BusinessController

BusinessService

BusinessListener

主要就这三个, 供其它的service和controller 继承。

?

BusinessController实现BusinessListener这个协议

BusinessService是BusinessController的成员变量,初始化的时候需要一个BusinessListener,一般传self

BusinessController主要就是发起网络异步请求 ,回来的时候通知初始化的时候需要一个BusinessListener

?

缺点:

1. 发起请求后,假如controller 立即释放 比如马上返回,这样回调的时候程序会爆掉。 ?需要在BusinessController 的dealloc方法里 ?把BusinessService 的 BusinessListener 设成nil

-(void) dealloc{    if([self.service isKindOfClass:[BusinessService class]])        ((NDKBusinessService *)self.service).businessListener = nil;        。。。        。。。}   

?

2. 由于发出网络请求后,都会回到同一个回调方法。。。所以会有一堆的判断,以区别不同的请求, 比如

-(void) recentItems{    actionType = ACTION_RECENT_ITEMS;      //send request}- (void)requestFinished:(ASIHTTPRequest *)request{    [super requestFinished:request];switch (actionType)        {            case ACTION_RECENT_ITEMS:                [self parseRecentItems:dict];                break;            case ACTION_RECENT_ITEMS_AWAKE_FROM_BACK:                [self parseRecentItems:dict];                break;。。。。。。}
?

?

3. 同时发起多个异步请求不方便。 需要线性发送。 ?这个是这个框架的最大的问题。

? ?举例说明:

self.service = [SerciceA alloc] initWithLisener:self]; [self.server invokeA]; //1self.service = [SerciceB alloc] initWithLisener:self];//2[self.service invokeB]; //3
?

用NSURLConnection没问题,用ASIHTTPRequest 会爆掉的,不信你可以试试,哈哈。。

原因是执行//3 的时候 SerciceA貌似会被release掉,没有被某个thread retain 住

?

替换方案:

1. 专门弄个thread, 开一个runloop, 专门用来发送请求和回调给controller.?

? ?这样做的好处有二

? ?1). 省去了一堆的 actionType,因为是同步方法了

? ?2). 可以同时发送多个请求。。。让runloop 来retain 那个service

?

? ?缺点:

? ?让runloop 发送请求的时候,传参数太麻烦了。。。

一般是这样的: 【self performSelector: onThread: withObject:waitUntilDone:] ? 看到withObject , 我表示很不淡定

2. 把异步请求全部改成同步请求

热点排行