Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Xcode 4警告“;表达式结果未使用”;用于NSURL连接_Iphone_Objective C_Ios_Xcode_Warnings - Fatal编程技术网

Iphone Xcode 4警告“;表达式结果未使用”;用于NSURL连接

Iphone Xcode 4警告“;表达式结果未使用”;用于NSURL连接,iphone,objective-c,ios,xcode,warnings,Iphone,Objective C,Ios,Xcode,Warnings,我只是想做我通常的数据传输。我定义NSMutableURLRequest,然后调用 [[NSURLConnection alloc]initWithRequest:request委托:self] 这在Xcode 3中是正常的,但是Xcode 4在那一行警告我“表达式结果未使用”。 这个请求确实有效,但我想找到一种方法来消除警告 我想我可以将连接存储在一个变量中,但我并不真的需要它,而且我看不出在下一行将其设置为nil有什么意义(尽管这会删除警告) 请注意:我不能100%确定它是Xcode 4还是

我只是想做我通常的数据传输。我定义NSMutableURLRequest,然后调用

[[NSURLConnection alloc]initWithRequest:request委托:self]

这在Xcode 3中是正常的,但是Xcode 4在那一行警告我“表达式结果未使用”。 这个请求确实有效,但我想找到一种方法来消除警告

我想我可以将连接存储在一个变量中,但我并不真的需要它,而且我看不出在下一行将其设置为
nil
有什么意义(尽管这会删除警告)


请注意:我不能100%确定它是Xcode 4还是启用了ARC。

应该有人负责该连接。不需要存储连接,但如果存储连接,则编码效果更好。问题是,在您创建了我们的
NSURLConnection
之后,没有人拥有指向所创建实例的指针,而这种情况本不应该发生

让我们假设以下示例:

  • 您的
    ClassA
    实例正在创建
    NSURLConnection
  • 您的
    ClassA
    实例正在被释放和解除分配
  • NSURLConnection
    仍处于活动状态,将向您解除分配的实例激发委托

  • 要解决该问题,您应该存储
    NSURLConnection的实例
    ,如果您的
    ClassA
    实例被解除分配,则应该释放该连接,这将导致
    NSURLConnection的实例也被解除分配。

    当函数返回您不需要的结果时,您可以将其强制转换为void要消除编译器警告,请执行以下操作:

    (void) [[NSURLConnection alloc] initWithRequest:request delegate:self];
    

    我还没有使用ARC,所以我不能说这是否是一个好主意,在ARC之前,您需要将指针结果保存在某个地方,以便发布它。

    progrmr的答案是正确的,但这里有一个更简洁的方法:

    [NSURLConnection connectionWithRequest:request委托:self]


    这不会导致警告,即使您没有将结果强制转换为无效。

    我无法释放它,因为ARC已打开。这不是ARC应该自动执行的操作,释放指针吗?但问题在语义上仍然存在:
    NSURLConnection
    知道您的
    ClassA
    实例,但没有人知道您的实例。两个实例之间都存在关系,需要管理此关系;)但是,如果您不保存指向
    NSURLConnection
    的指针,则没有人有指向它的指针,ARC会立即解除分配连接,也不会解除分配连接。如果保存生成的指针,则不会出现警告,并且您具有更好的编码设计,然后您可以编写更可靠的代码:
    连接:(NSURLConnection*)con didsh{If(con!=self.curCon)return;}
    这确实删除了警告,并且函数仍按要求工作,因此一切正常!这是我第一次看到这个角色无效。这是个好习惯吗?谢谢是的,因为它记录了一个事实,即你知道有一个结果被返回,但你不需要这个结果。这就是我一直在寻找的谢谢你,好人。。世界需要更多像你这样的超级英雄:)当我尝试使用基于定义的日志宏时,我仍然会收到警告:
    \if SHOW_DEBUG_LOG#define DEBUG_LOG(x…)NSLog(@“DEBUG LOG:”x,_VA_ARGS#)else#define DEBUG_LOG(x…)(void)(x);do{(void)(_VA_ARGS__)}而(0)#endif
    从iOS 10起已弃用:(