Objective c 在块内将NSNumber withInt递增1。对某些价值观的冲击

Objective c 在块内将NSNumber withInt递增1。对某些价值观的冲击,objective-c,objective-c-blocks,Objective C,Objective C Blocks,我正在尝试创建一个通用BlockController,其中我将块属性设置为SOMEBLOCK。然后我可以在BlockController更新方法上调用该块,将BlockController的属性作为参数传入;理想情况下,NSNumbers的NSArray,其思想是块将从索引中提取正确的值并相应地设置它们 我无法使值保持在我尝试使用_块时更改的范围之外,但肯定没有正确执行。我现在将实验更改为使用整数块的简单增量,即: typedef int (^IntegerBlock)(); 我使用初始化我

我正在尝试创建一个通用BlockController,其中我将块属性设置为SOMEBLOCK。然后我可以在BlockController更新方法上调用该块,将BlockController的属性作为参数传入;理想情况下,NSNumbers的NSArray,其思想是块将从索引中提取正确的值并相应地设置它们

我无法使值保持在我尝试使用_块时更改的范围之外,但肯定没有正确执行。我现在将实验更改为使用整数块的简单增量,即:

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时,我崩溃了

我看到这个帖子:

我的主要观点是:

int main(int argc, char *argv[])
{
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   int retVal = UIApplicationMain(argc, argv, nil, nil);
   [pool release];
   return retVal;
}


为什么它会崩溃?有没有更优雅的方法?我希望如此

更新方法做什么?为什么要将其转换为整数,然后直接返回到NSNumber实例?