ios – 保持字典内的块

ios – 保持字典内的块,第1张

概述我有自己的方法,以块为参数.我想跟踪NSDictionary中的那个块.什么是最好的方法来添加到字典的块? 我尝试这个代码,但执行下面的行(setObject …)后,字典仍然是空的.我认为这是因为块不是类型NSObject.但是,这样做的正确方法是什么? - (void)startSomething:(NSURLRequest*)request block:(void (^)(NSURLResp 我有自己的方法,以块为参数.我想跟踪NSDictionary中的那个块.什么是最好的方法来添加到字典的块?

我尝试这个代码,但执行下面的行(setobject …)后,字典仍然是空的.我认为这是因为块不是类型NSObject.但是,这样做的正确方法是什么?

- (voID)startSomething:(NSURLRequest*)request block:(voID (^)(NSURLResponse*,NSData*,NSError*))handler {    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];    [pendingRequests setobject:handler forKey:connection];}

编辑:

没关系.我不知道我在想什么3分:

>块是对象
> Typo:setobject应该是setValue
> forKey是一个字符串,所以应该是[连接描述]或类似的东西

无论如何我现在解决了我的问题:

- (voID)startSomething:(NSURLRequest*)request block:(voID (^)(NSURLResponse*,NSError*))handler {    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];    [pendingRequests setValue:handler forKey:[connection description]];}- (voID)connectionDIDFinishLoading:(NSURLConnection *)connection {    dispatch_async(dispatch_get_global_queue(disPATCH_QUEUE_PRIORITY_DEFAulT,0),^(voID) {        voID (^handler)(NSURLResponse*,NSError*);        handler = [pendingRequests valueForKey:[connection description]];        handler(nil,nil,nil);    });}
解决方法 这还不行,或者说,最多只会巧合.

您需要复制处理程序,然后将其拖放到字典中.就像是:

voID (^handlercopy)(NSURLResponse*,NSError*) = Block_copy(handler);[dict setobject:handlercopy forKey:@"foo"];Block_release(handlercopy); // dict will -retain/-release,this balances the copy.

而且,是的,它应该是setobject:forKey:和objectForKey :.

总结

以上是内存溢出为你收集整理的ios – 保持字典内的块全部内容,希望文章能够帮你解决ios – 保持字典内的块所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1112564.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存