我正在尝试创建一个通用的“BlockController”,我将块属性设置为SOMEBLOCK。然后我可以在BlockController更新方法上调用该块,从BlockController传入属性作为参数;理想情况下是NSNumber的NSArray(认为该块将从索引中提取正确的值并相应地设置它们。)
我无法让值保持更改超出范围(我尝试使用__block,但一定不能正确地执行此操作)。我现在使用“IntegerBlock”将实验改为简单的增量器,即:
typedef int (^IntegerBlock)();
我用
初始化我的BlockController- (id)initWithIntegerBlock:(IntegerBlock)block defaultValue:(int)defaultValue {
self = [super init];
if (self) {
_updateBlock = Block_copy(block);
self.number = [NSNumber numberWithInt:defaultValue];
}
return self;
}
以下是我运行的代码:
- (void)viewDidLoad {
[super viewDidLoad];
IntegerBlock block = ^(NSNumber *n){
int integer = [n intValue];
integer++;
n = [NSNumber numberWithInt:integer];
return integer;
};
self.bc = [[BlockController alloc] initWithIntegerBlock:block defaultValue:0];
[self.bc update];
timer = [NSTimer scheduledTimerWithTimeInterval:.5 target:self selector:@selector(tick) userInfo:nil repeats:YES];
}
- (void)tick {
[self.bc update];
}
当数值达到13时,我崩溃了。
我看过这篇文章:NSNumber numberWithInt crashing on numbers >= 13
我的主要看起来像:
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
为什么会崩溃?有没有更优雅的方式来做到这一点? (我希望如此)