ios – 线程仍在运行旧视图

我有一个应用程序,其中有五个屏幕.

在每个屏幕上,在viewDidLoad中我从服务器访问数据.

在每个屏幕上,我有下一个按钮.

当我从屏幕一到屏幕五(通过单击下一步4次),在NSLog中,我仍然看到所有前四个视图控制器完成的过程.

有什么办法,我怎么能杀死那些线程?

简而言之,当我离开那个视图时,我不想做任何过程,即如果我从视图3到4,我想停止我对视图3的任务.

获取早期观点的数据&等待那些数据(这是不需要的)不适合app,因此我想要像我上面解释的那样.

编辑1

下面是我用于读取数据的代码.

.H

@property(nonatomic, retain) NSMutableData *webData;
@property(nonatomic, retain) NSMutableData *data;

使用下面我请求数据

.M

NSString *myTMainURL = [NSString stringWithFormat:@"http://www.google.com"];
NSURL *url = [NSURL URLWithString:myTMainURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[[NSURLConnection alloc] initWithRequest:request delegate:self];

阅读,下面是我的阅读方式.

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    NSLog(@"didReceiveResponse");
    data = [[NSMutableData alloc] init ];
    [webData setLength: 0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)theData {
    NSLog(@"didReceiveData");
    [data appendData:theData];
    [webData appendData:data];
    NSLog(@"didreceveidata leng===%d===%d", [webData length], [data length]);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"connectionDidFinishLoading");

    NSString *myDataFromLink = [[NSString alloc] initWithBytes: [data mutableBytes] length:[data length] encoding:NSUTF8StringEncoding];

    NSLog(@"myDataFromLink====%@--", myDataFromLink);

}

最佳答案 在viewWillDisappear:中,将cancel发送到正在运行的任何操作.

当然,这假设您有一个可取消的任务/方法/操作.

例如,对于网络请求,如果使用NSURLConnection,则采用委托方法时就是这种情况.使用NSURLConnection方便的类方法sendAsynchronousRequest:queue:completionHandler:这是不可能的.因此,任何严肃的应用程序都将使用委托方法,因为长时间运行的异步操作必须是可取消的.

点赞