所以我正在使用restkit进行异步调用等等,感觉处理可能的连接问题的最佳方法之一就是拥有一个requestManager,它包含一个请求数组,并且它会一直循环遍历并随时删除它们是成功的,这样可以创建请求的有效负载并添加到管理器中,应用程序的其余部分可以继续而不必担心返回,除非它是GET ...现在我的问题是一些请求正在使用闭包或代码块。
我无法正确理解它的语法和用法。特别是当涉及到块。
这就是我计划实施它的方式......
所以我先拨打这个电话
GameInfo *game = [[GameInfo alloc] init];
game.myWTFID = [playerInfo _wtfID];
game.opponentWTFID = [gameInfoObj GetOpponentWTFID];
game.gameType = [NSNumber numberWithInt:[gameInfoObj gameType]];
game.turnNumber = [gameInfoObj GetTurnNumber];
game.lastMove = [gameInfoObj GetGameID];
[[RequestPayload sharedRequestPayload] addPutRequestForObject : game withSerializationMapping : serializedGameMap forClass : [Game class] withBlock :^(RKObjectLoader *loader)
{
[loader setObjectMapping:gameMap];
loader.delegate = self;
loader.onDidLoadResponse = ^(RKResponse *response)
{
[game release];
};
loader.targetObject = nil;
loader.backgroundPolicy = RKRequestBackgroundPolicyRequeue;
}
];
这是实施
- ( void ) addPutRequestForObject : (id) object withSerializationMapping : (RKObjectMapping*) serialMapping forClass : (Class) class withBlock : ( void(^)(RKObjectLoader*) ) block
{
NSMutableDictionary *dict = [NSMutableDictionary new];
NSNumber *postType = [[NSNumber alloc]initWithInt:1];
[dict setObject:postType forKey:@"request"];
[dict setObject:object forKey:@"data"];
[dict setObject:serialMapping forKey:@"serialMapping"];
[dict setObject:class forKey:@"class"];
void (^ copyBlockLoader)(id,RKObjectMapping*) = Block_copy(block);
[dict setObject:copyBlockLoader forKey:@"block"];
Block_release(copyBlockLoader);
[postType release];
postType = nil;
[_RequestsToInvoke addObject:dict];
}
然后在一个for循环中,在遍历数组中的每个对象之后,这将是一个包含所需信息的字典来做这样的事情。(道歉,如果这没有意义,它是非常人为的,因为实际的方法很多更长,但我想到的重要部分就在这里。)
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:[dict objectForKey:@"serialMapping"] forClass:[dict objectForKey:@"class"]];
void(^block)(RKObjectLoader *) = [dict objectForKey:@"block"];
[[RKObjectManager sharedManager] putObject:object usingBlock:block];
所以我的问题是
在我要求它发布游戏对象的第一个片段中......那会有用吗?或者它会导致泄漏,游戏对象在与该调用相同的范围内声明,因此我唯一留下的指针是代码块中的指针。
我是否正确地将该块保存到字典中?
最后有没有人有更好的选择?或者在我的实施中发现需要纠正/修改的其他内容?