私は drupal-ios-sdk (AFNetworking に基づく) を使用しており、アプリにはストーリーボードで作成されたタブ バー コントローラーがあります。ビュー コントローラーの 1 つをロードするときに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
も違いはないようです。どうして?