ma1*_*w28 0 delegates objective-c retain asihttprequest assign
是否可以保留子类的委托ASIHTTPRequest?
我做了一个ASIHTTPRequest被调用的子类JSONRequest.每个实例JSONRequest都是它自己的委托,处理回调,并将它们传递给它jsonDelegate,它是一个私有属性JSONRequest,并响应requestFinished:withResult:,其中result是NSDictionaryJSON响应的表示.要做到这一点,我重载setDelegate:在JSONRequest做super.delegate = self; self.jsonDelegate = newDelegate.
jsonDelegate在这种情况下保留是否可以,因为通常jsonDelegate是一个视图控制器,如果用户点击"返回"等,有时会在加载请求时解除分配.我将jsonDelegate在JSONRequest调用回调方法后释放.
我怎么知道这没关系,也不会导致保留循环.
什么保留了请求?(操作队列,也许?谁知道?)
一般来说,你似乎提出的"一见不放,给我一个回调"的方法是一个坏主意.如果除了请求之外没有任何东西保留VC,那么(除非你的应用程序结构有点愚蠢)VC将永远不会对它收到的数据做任何事情,所以没有理由继续它.
它也有问题:请求是否拥有VC,或者VC是否拥有该请求?我期待后者,所以VC也应该保留请求.
有几个例外:
对于这些情况,我经常使用"弱代理"类来解决它,它不保留其目标(我在NSTimer/CADisplayLink周围写了一个"弱定时器"包装器,以使这更容易.)
你应该做的是跟踪你发起的请求和dealloc,做类似的事情
request.delegate = nil;
[request cancel];
self.request = nil;
Run Code Online (Sandbox Code Playgroud)
同样,您应该在适当的时间取消注册通知/操作/ KVO回调.有一个例外:
例外有例外:
| 归档时间: |
|
| 查看次数: |
1074 次 |
| 最近记录: |