因此,我将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];
所以我的问题是
在我要求它释放游戏对象的第一个片段中......这行得通吗?还是会导致泄漏游戏对象在与该调用相同的范围内声明,因此我剩下的唯一指针是代码块中的指针。
我是否正确地将块保存到字典中?
最后有人有更好的选择吗?或者在我的实现中发现需要更正/修改的其他内容?