Variables 目标C块和变量 +(NSArray*)getArrayOfBubblesWithTitles:(NSArray*)titles和MainBubble:(BubbleContainer*)mainB{ UIColor*c=主颜色; 拐角=[Styles getCornerForPoint:main.frame.origin]; NSMUTABLEARRY*块=[[NSMUTABLEARRY alloc]init]; NSU整数计数=titles.count; CGSize size=mainB.frame.size; //TODO:计算块框架 对于(int a=0;a

Variables 目标C块和变量 +(NSArray*)getArrayOfBubblesWithTitles:(NSArray*)titles和MainBubble:(BubbleContainer*)mainB{ UIColor*c=主颜色; 拐角=[Styles getCornerForPoint:main.frame.origin]; NSMUTABLEARRY*块=[[NSMUTABLEARRY alloc]init]; NSU整数计数=titles.count; CGSize size=mainB.frame.size; //TODO:计算块框架 对于(int a=0;a,variables,objective-c-blocks,Variables,Objective C Blocks,关于变量的使用,我不确定我的模块是否能正常工作。在apple文档中,它说任何更改都反映在封闭词法范围内,包括在同一封闭词法范围内定义的任何其他块。我不确定这意味着什么,但我认为这意味着在for语句中使用变量a,每个块中只使用a的最高值,而不是0计数。使用这些实例变量(计数、大小)是否也可以避免使用指向对象(如mainB)的强指针?这很难测试。我远远不能运行我的代码,所以如果你对代码块有任何了解,你会批评我吗 谢谢首先,要意识到你引用的那句话: 专门且仅适用于块可变变量,即带有\u块修饰符的变量

关于变量的使用,我不确定我的模块是否能正常工作。在apple文档中,它说
任何更改都反映在封闭词法范围内,包括在同一封闭词法范围内定义的任何其他块。
我不确定这意味着什么,但我认为这意味着在for语句中使用变量
a
,每个块中只使用a的最高值,而不是0计数。使用这些实例变量(计数、大小)是否也可以避免使用指向对象(如
mainB
)的强指针?这很难测试。我远远不能运行我的代码,所以如果你对代码块有任何了解,你会批评我吗


谢谢

首先,要意识到你引用的那句话:

专门且仅适用于块可变变量,即带有
\u块
修饰符的变量。在您向我们展示的代码段中没有任何块可变变量,因此该行不适用

我认为这意味着在for语句中使用变量a时,每个块中只使用a的最高值,而不是0-count

在块中使用但在封闭范围中定义的变量通常是只读的——如果试图进行更改,编译器会抱怨该变量不可赋值。要进行更改,需要使用
\u block
修饰符将变量标记为块可修改。对块可修改变量所做的更改将反映在封闭范围中

下面是一个例子:

+ (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;
}
输出为:

{
    __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);
}

是的,第二位是默认启用的,我的意思是,我担心
a
是指向该变量的指针,所以当
块[a]
位被调用时,它总是本质上是
块[count]
而不是
块[3]
或其他什么。还有变量的计数和大小,我是否必须这样做才能阻止它创建指向这些对象的额外强指针,从而产生保留问题?@user1726450:
a
是一个变量。另外,
count
size
不是对象指针。
before the assignment anInteger is: 42
before the block anInteger is: 84
inside the block anInteger is: 84
after the block anInteger is: 96