我正在使用 drupal-ios-sdk(基于 AFNetworking),我的应用程序有一个使用情节提要创建的选项卡栏控制器。加载其中一个视图控制器时,我正在initWithCoder
使用 drupal-ios-sdk 创建一个请求,并在success block
. 稍后viewDidLoad
我尝试打印此变量,并且我对为什么必须在成功块中保留实例变量感兴趣,即使我使用自动释放定义了变量。
这不是ARC!
在成功块中不使用保留
我的 VC.h
@interface AboutViewController : UIViewController {
@private
NSDictionary *response;
NSString *aboutPageHTML;
}
@end
我的VC.m
-(id) initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
NSDictionary *viewData = [NSMutableDictionary new];
[viewData setValue:@"aboutse" forKey:@"view_name"];
aboutPageHTML = [[[NSString alloc]init] autorelease];
void(^successBlock)(AFHTTPRequestOperation*, id) =
^(AFHTTPRequestOperation *operation, id responseObject) {
response = [responseObject copy];
aboutPageHTML = [response valueForKey:@"body"];
NSLog(@"%s - %@", __PRETTY_FUNCTION__, aboutPageHTML);
[aboutPageHTML retain]; // critical!
};
[DIOSView viewGet:viewData success:successBlock
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%s, %@", __PRETTY_FUNCTION__, error);
}];
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"%s - %@", __PRETTY_FUNCTION__, aboutPageHTML);
NSLog(@"%s - %f %f", __PRETTY_FUNCTION__, self.view.bounds.size.width, self.view.bounds.size.height);
}
编辑:
声明变量__block
似乎没有什么区别。怎么会?