+ (NSArray *)getArrayOfBubblesWithTitles:(NSArray *)titles andMainBubble:(BubbleContainer *)mainB {
UIColor *c = mainB.colour;
Corner corner = [Styles getCornerForPoint:mainB.frame.origin];
NSMutableArray *blocks = [[NSMutableArray alloc] init];
NSUInteger count = titles.count;
CGSize size = mainB.frame.size;
//TODO: calculation blocks frame
for (int a = 0; a < titles.count; a++) {
PositionCalculationBlock x = ^{
return [SimpleSelectionView getPositionOfObjectAtIndex:a outOfBubbles:count size:size fromCorner:corner];
};
[blocks addObject:x];
}
NSMutableArray *m = [[NSMutableArray alloc] init];
for (int a = 0; a < titles.count; a++) {
[m addObject:[[BubbleContainer alloc] initSubtitleBubbleWithFrameCalculator:blocks[a] colour:c title:titles[a] andDelegate:NO]];
}
return m;
}
我不确定我的块是否可以正常使用变量。在apple docs中它说Any changes are reflected in the enclosing lexical scope, including any other blocks defined within the same enclosing lexical scope.
我不确定这意味着什么,但我认为这意味着我在for语句中使用变量a
的地方,只会在每个中使用最高值a阻止而不是0计数。还使用那些实例变量(count,size)避免使用指向mainB
之类的对象的强指针?这很难测试。我远离能够运行我的代码,所以如果你对块有任何了解,你可以批评吗?
由于
答案 0 :(得分:2)
首先,要实现引用的行:
特别适用于块可变变量,即带有__block
修饰符的变量。您在向我们展示的代码段中没有任何块可变变量,因此该行不适用。
我认为这意味着我在for语句中使用变量a时,只会在每个块中使用a的最高值而不是0-count
块中使用但在封闭范围内定义的变量通常是只读的 - 如果尝试进行更改,编译器会抱怨该变量不可分配。要进行更改,需要使用__block
修饰符将变量标记为块可修改。对块可修改变量所做的更改将反映在封闭范围内。
以下是一个例子:
{
__block int anInteger = 42;
void (^testBlock)(void) = ^{
NSLog(@"inside the block anInteger is: %i", anInteger);
anInteger = 96;
};
NSLog(@"before the assignment anInteger is: %i", anInteger);
anInteger = 84;
NSLog(@"before the block anInteger is: %i", anInteger);
testBlock();
NSLog(@"after the block anInteger is: %i", anInteger);
}
输出结果为:
before the assignment anInteger is: 42
before the block anInteger is: 84
inside the block anInteger is: 84
after the block anInteger is: 96