Я помещаю некоторый блок в массив, затем печатаю тип блока, он отличается, кроме того, код хорошо работает в основной функции, но вылетает в пользовательском классе.
Я не нашел ни одногоинформация для объяснения проблемы.
Хорошо работает в основной функции:
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSInteger a = 1;
int b = 1;
NSArray *arr = [NSArray arrayWithObjects:^{NSLog(@"%ld",a);}, ^{NSLog(@"first~~~%d",b);}, nil];
id c = arr[0];
id d = arr[1];
NSLog(@"%@, %@",[c class],[d class]);
}
return 0;
}
Он печатает ' NSMallocBlock , NSStackBlock '.
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSInteger a = 1;
int b = 1;
NSArray *arr = [NSArray arrayWithObjects:^{;}, ^{NSLog(@"first~~~%d",b);}, nil];
id c = arr[0];
id d = arr[1];
NSLog(@"%@, %@",[c class],[d class]);
}
return 0;
}
Он печатает ' NSGlobalBlock , NSStackBlock ', и происходит сбой в пользовательском классе:
- (instancetype)init {
if (self = [super init]) {
int a = 1;
int b = 1;
NSArray *arr = [NSArray arrayWithObjects:^{NSLog(@"%ld",a);}, ^{NSLog(@"first~~~%d",b);}, nil];
id c = arr[0];
id d = arr[1];
NSLog(@"%@, %@",[c class],[d class]);
}
return self;
}
Я хочу знать, почему это произошловыведите три типа блоков: ' NSGlobalBlock , NSMallocBlock , NSStackBlock ' и почему он вылетел.