我正在使用AFNetworking(2.3.1)解析JSON數據並將其顯示在標籤中。離開視圖時停止異步塊請求(AFNetworking; iOS)
爲此,我正在使用在AFHTTPRequestOperation.h
中聲明的setCompletionBlockWithSuccess
。
三大功能正在呼籲viewDidLoad
,一個看起來像:
-(void)parse {
NSURL *url = [[NSURL alloc] initWithString:kURL];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Parse Successful");
//Code for JSON Parameters and to display data
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", [error localizedDescription]);
//Code for Failure Handling
}];
[operation start];
}
雖然這個工程就像一個魅力,因爲它被包含在一個塊請求,這個過程持續整個應用程序的狀態。所以當這個數據不需要顯示時,請求仍然在加載,並且由於這些塊我正在接收內存警告。
我的問題是,一旦離開創建它們的View Controller時,如何停止,取消或暫停這些進程,以便節省內存和數據,或者適當地處理它們?
原諒我,如果這是一個明顯的答案,我只是處理或創建完全錯誤的方式塊。我對AFNetworking和Blocks,操作,異步請求等都是新手。
謝謝。
我檢查出取消操作之前,但有一個問題。 一旦我在void語句之外聲明操作(以便它可能被引用來取消),我會收到警告,您可以在這裏看到(http://i.imgur.com/yGDhrfX.png )。 我知道這和is和__weak,__block之類的聲明有關。你能在這裏指出我正確的方向嗎? 另外,NSOperations一旦被取消就可以重新啓動了嗎? –
鏈接中的警告很可能是因爲變量bTCAverage是該類的實例變量,並且正在從塊內部訪問它,因此它可以創建保留週期。我用更具體的例子更新了我的答案。 – Brandon