0

因此,我将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];

所以我的问题是

在我要求它释放游戏对象的第一个片段中......这行得通吗?还是会导致泄漏游戏对象在与该调用相同的范围内声明,因此我剩下的唯一指针是代码块中的指针。

我是否正确地将块保存到字典中?

最后有人有更好的选择吗?或者在我的实现中发现需要更正/修改的其他内容?

4

0 回答 0