У меня есть вопрос о переменных экземпляра в сочетании с блоками и дугой в Objective C с IOS5.
Вскоре, когда я получаю доступ к этому коду, iPhone дает мне EXC_BAD_ACCESS и завершается:
- (void) doRequest: (void (^)(XMLTreeNode*) )completionHandler {
NSString * urlString = [NSString stringWithFormat:@"blablaurl=%@&", action];
for( NSString* key in parameters ){
urlString = [urlString stringByAppendingFormat:@"&%@=%@", key, [parameters objectForKey:key]];
}
NSURL * url = [NSURL URLWithString:urlString];
NSLog( @"Visiting: %@", [url absoluteString] );
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse * response, NSData * data, NSError * err) {
NSLog( @"Params=%@", parameters );
completionHandler(e);
}];
}
exc_bad_access происходит в: NSLog (@ "Params =% @", параметры);
(параметры - переменная экземпляра класса) .. Только что определено в заголовочном файле, нетспециальная собственность или что-то еще ..
Почему происходит сбой и как я могу предотвратить это?Спасибо!
Я предполагаю, что он аварийно завершает работу, потому что время жизни объектов истекло после вызова doRequest, и, таким образом, ARC очищает все переменные (и с этим параметром var). Когда urlconnection завершает работу и вызывает блок, переменные экземпляра уже очищены ..