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

审慎使用ASIHttpRequest的block特性

2012-07-19 
谨慎使用ASIHttpRequest的block特性谨慎使用ASIHttpRequest的block特性使用ASIHttpRequest的setCompletion

谨慎使用ASIHttpRequest的block特性
谨慎使用ASIHttpRequest的block特性  

  使用ASIHttpRequest的setCompletionBlock、setFailedBlock时碰到一些诡异的内存泄漏和莫名其妙的行为(如:无法release对象)。经过与同事的讨论、查找资料终于得以解决,全是对block理解不透彻惹的祸。

1. 声明ASIHttpRequest时一定要使用__block关键字
  __block关键字告诉block不要retain request,这对于防止循环retain非常重要!!因为request总是会retain block
2. 谨慎处理block与对象的关系
  当setCompletionBlock/setFailedBlock内部使用对象的instance var时,self会被retain(If you access an instance variable by reference, self is retained;)。所以在request结束前向对象发送release消息不会导致对象的释放(dealloc),亦即:该对象依然可进行所有操作,这将导致诸多你意想不到的结果。
3. 解决第2点的问题
  3.1 仔细拿捏block与对象的关系 + 按值的方式访问instance var(If you access an instance variable by value, the variable is retained.)
  3.2 不使用block,而使用ASIHttpRequestDelegate
4. 参考资料
  4.1 http://allseeing-i.com/ASIHTTPRequest/How-to-use - Using blocks
  4.2 Blocks Programming Topics - Object and Block Variables

原文:
http://www.cocoachina.com/bbs/read.php?tid=95100

热点排行