#import "ViewController.h"
@implementation ViewController
int tnt=1;
-(void)myMethod{
void(^blk)(void) = ^(void){
tnt = 3+1;
NSLog(@"tnt=>%d", tnt);
};
blk();
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self myMethod];
}
変数 tnt は外側にありますが、ブロックの内側では完全に正常に機能しています。myMethod 内で tnt 変数を宣言すると、__block に必要なエラーが発生し始めます。
どちらの場合も、tnt 変数はブロックの外にあります。Apple docs には、外部の変数には __block ストレージ タイプが必要であるとも書かれています。tnt が myMethod の外で宣言されている場合に機能するのはなぜですか。