我尝试这个代码,但执行下面的行(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 – 保持字典内的块所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)