【问题标题】:Double star argument in objective-c method?Objective-C方法中的双星参数?
【发布时间】:2009-07-31 02:17:04
【问题描述】:
NSURLResponse *response =[[NSURLResponse alloc] initWithURL:requestingURL
                                                   MIMEType:@"text/xml"
                                      expectedContentLength:-1
                                           textEncodingName:nil];

webData = [NSURLConnection sendSynchronousRequest:theRequest
                                returningResponse:response
                                            error:NULL];

我收到编译器警告说警告从不兼容的指针类型传递参数。我怀疑这是因为 NSURLResponse 参数是双星参数(NSURLResponse **)?

我在这里做错了什么?

【问题讨论】:

    标签: iphone objective-c cocoa cocoa-touch


    【解决方案1】:

    响应将通过引用返回给您。

    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest: request
                                    returningResponse: &response
                                    error: &error];
    

    这是正确的调用方式,并通过引用返回响应和错误。

    在上面的代码中,除了语法错误之外,您还泄漏了响应对象。

    【讨论】:

    • 好答案。请注意,如果您不想处理它,将 NULL 传递给 error: 参数是完全合法的,但通过引用获取它通常是一种好习惯。此外,您不必在传递 responseerror 之前将它们设置为 nil,因为无论如何该方法都会覆盖这些值。 (可能有一些方法没有,但 IMO 的形式很糟糕。它至少可以做的就是酌情为您提供零参数。)
    • 把未初始化的局部变量留在周围等着咬你简直是疯了。
    • 它会覆盖error,如果它有一个给你,但如果它没有,它会保持error不变。 (即使它没有保持原样,你仍然应该假设它会,因为在没有错误的情况下方法对error 所做的通常没有记录。)从表面上看,你应该能够依赖@987654328 @ 不是nil 如果datanil,但请记住Finagle 定律。
    猜你喜欢
    • 1970-01-01
    • 2015-11-01
    • 2012-07-22
    • 2011-01-03
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多