如何在ios中停止从NSURL获取数据?

时间:2014-01-10 12:39:57

标签: ios iphone

我从nsurl获取数据,但如果我可以更改视图,则停止接收NSData

我在我的代码

下面停止接收数据的网址
-(void)AllPoint{

            NSString *passString=[NSString stringWithFormat:URL];
            //NSLog(@"all %@",passString);
            NSURL *url_album=[NSURL URLWithString:passString];

            dispatch_async(kBgQueue, ^{
                NSData* data = [NSData dataWithContentsOfURL:url_album];
                [self performSelectorOnMainThread:@selector(allPOINT:) withObject:data waitUntilDone:YES];
            });

        }
        -(void)allPOINT:(NSData *)responseData{

                if (responseData==nil){

                } else {

                    NSError* error;
                    NSMutableDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

                    //NSLog(@"all:%@",json);
                }
            }

怎么可能?

1 个答案:

答案 0 :(得分:2)

块无法取消..也不能取消呼叫dataWithContentsOfURL。它无论如何都会完成。

你有两个选择

  1. 将NSURLConnection与使用delegate =>的异步变体一起使用然后你可以取消连接
  2. 只是不执行回调allPOINT:如果您的View不再可见
  3. ...我;顺其自然,因为方式1是很多额外的工作;)

           __weak typeof(self) wself = self;
           dispatch_async(kBgQueue, ^{
                typeof(wself) sself = wself;
                NSData* data = [NSData dataWithContentsOfURL:sself->url_album];
                if(sself.visible)
                    [sself performSelectorOnMainThread:@selector(allPOINT:) withObject:data waitUntilDone:YES];
            });
    

    a)通知我使用弱自我反对自我,以便不保留自我...

    b)您需要一个由您控制的属性visible您在viewDidAppear中将其设置为true,在viewWillDisappear中将其设置为false