我只是想进行我通常的数据传输。我定义了我的 NSMutableURLRequest 然后调用
[[NSURLConnection alloc] initWithRequest:request delegate:self];
这对于 Xcode 3 来说是可以的,但 Xcode 4 在该行警告我“未使用的表达式结果”。该请求确实有效,但我想找到一种方法来消除警告。
我想我可以将连接存储在一个变量中,但我并不真正需要它,而且我看不到将其设置为 nil
下一行的意义(尽管这会删除警告)
请注意:我不能 100% 确定它是 Xcode 4 还是启用了 ARC。
当函数返回不需要的结果时,可以将其强制转换为 void 以消除编译器警告:
(void) [[NSURLConnection alloc] initWithRequest:request delegate:self];
我还没有使用过 ARC,所以我不能说这是否是一个好主意,在 ARC 之前,您需要将此指针结果保存在某个地方以便您可以释放它。
progrmr 的答案是正确的,但这是一种更清洁的方法:
[NSURLConnection connectionWithRequest:request delegate:self];
这不会导致警告,即使您没有将结果强制转换为 void。
应该有人对那个 NSURLConnection
负责。不需要存储连接,但如果你这样做,它是更好的编码。问题是,在您创建了我们的 NSURLConnection
之后,没有人拥有指向该已创建实例的指针,这不应该是这种情况。
让我们假设以下示例:
您的 ClassA 实例正在创建一个实例 NSURLConnection 您的 ClassA 实例正在释放并且已解除分配 NSURLConnection 仍然存在,并将触发委托给您已解除分配的实例。
要解决这个问题,您应该存储 NSURLConnection
的实例,并且如果您的 ClassA
实例正在被释放,这会导致 NSURLConnection
的实例也被释放,则应该释放该连接。
NSURLConnection
知道您的 ClassA
实例,但没有人知道您的实例。两个实例之间存在关系,并且需要管理这种关系;)但是,如果您不保存指向 NSURLConnection
的指针,那么没有人有指向它的指针,并且 ARC 会立即或永远不会释放连接。如果您保存生成的指针,则不会出现警告,并且您有更好的编码设计,然后您可以编写更可靠的代码:connection:(NSURLConnection*)con didSth{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__); } while (0) #endif