Objective c 在块内将NSNumber withInt递增1。对某些价值观的冲击
我正在尝试创建一个通用BlockController,其中我将块属性设置为SOMEBLOCK。然后我可以在BlockController更新方法上调用该块,将BlockController的属性作为参数传入;理想情况下,NSNumbers的NSArray,其思想是块将从索引中提取正确的值并相应地设置它们 我无法使值保持在我尝试使用_块时更改的范围之外,但肯定没有正确执行。我现在将实验更改为使用整数块的简单增量,即:Objective c 在块内将NSNumber withInt递增1。对某些价值观的冲击,objective-c,objective-c-blocks,Objective C,Objective C Blocks,我正在尝试创建一个通用BlockController,其中我将块属性设置为SOMEBLOCK。然后我可以在BlockController更新方法上调用该块,将BlockController的属性作为参数传入;理想情况下,NSNumbers的NSArray,其思想是块将从索引中提取正确的值并相应地设置它们 我无法使值保持在我尝试使用_块时更改的范围之外,但肯定没有正确执行。我现在将实验更改为使用整数块的简单增量,即: typedef int (^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时,我崩溃了
我看到这个帖子:
我的主要观点是:
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
为什么它会崩溃?有没有更优雅的方法?我希望如此更新方法做什么?为什么要将其转换为整数,然后直接返回到NSNumber实例?