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
关于变量的使用,我不确定我的模块是否能正常工作。在apple文档中,它说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块修饰符的变量
任何更改都反映在封闭词法范围内,包括在同一封闭词法范围内定义的任何其他块。
我不确定这意味着什么,但我认为这意味着在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