phone开发中经常遇到要一个类的数据完全加载完成后才能继续调用另一个类中的函数的情况,比如我有一个功能需要实现一次web请求,根
据请求返回的数据决定第二步加载的内容,这时,我们需要使用回调方法。
这里根据我近期开发项目上遇到的问题和用到的方法进行一次总结,希望对开发的同学有所帮助。
1.通过协议的代理方法触发需要调用的函数,
比如我们可以先定义一个协议@protocol HeadViewDelegate;
这里headview就是我们需要预先加载的视图,我们在headview中加入一个代理方法
@protocol HeadViewDelegate
-(void )showInfo;
@end
这样只要在调用这个对象的时候为他加上一个delegate就可以使用-(void )showInfo;的协议方法了,我们就可以任意控制在这个headview加载完成后再去做其他的事情。
这种方法是比较常规的方法,也是比较稳妥的方案,可以对需要调用协议的方法加代理,不需要的就可以不用加……
怎么样是不是感觉很灵活~
2.通过 NSNotification方法通知主调对象调用函数
这个方法的优点就是很方便,代码量少,话说只需要在需要发送通知的地方加上一句 :
[[NSNotificationCenter defaultCenter] postNotificationName:@"functionName"
就可以实现消息的推送,是不是很强大- -
然而,发送的消息我们怎么去获得呢,我们可以在主调对象的viewdidload中加入一个监听:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (functionName) name:@"update"
然后只要这个第三方对象post了一次消息我们就可以接受到她并且调用functionName函数
but~别忘了移除移除这个监听通知,不然的话就会在你调用viewdidload的时候就会产生一个通知,到时候会是无数个通知,试想一下,如果这个被调的函数是web请求,那岂不是要请求N次……
所以看到网上很多同学直接拿了上面2句就用,看到很不放心,这里我补充一句:
需要在dealloc时加上[self removeObserver:self name:@"functionName"
3.object-c中还有2个很邪恶的函数:respondsToSelector和performSelector,这2个函数查下cocoa API就会知道,
前者是检测所调用的函数是否用响应,返回一个BOOL类型的结果,后面这个函数是执行指定的函数