Objective c 为什么局部变量总是强的?

Objective c 为什么局部变量总是强的?,objective-c,variables,block,Objective C,Variables,Block,根据课堂上的笔记,据说局部变量总是强的。我真想知道为什么。为什么局部变量总是强的 顺便说一句,我正在学习积木。据我所知,局部变量应该在方法或块中使用和声明。但是,我在使用块时看到的局部变量在方法外部声明,但在块内部使用。所以,我真的很好奇 局部变量位于方法外部的代码如下所示: _block BOOL stoppedEarly = NO; // this is the local variable double stoppedValue = 52; [aDictionary enumerateKe

根据课堂上的笔记,据说局部变量总是强的。我真想知道为什么。为什么局部变量总是强的

顺便说一句,我正在学习积木。据我所知,局部变量应该在方法或块中使用和声明。但是,我在使用块时看到的局部变量在方法外部声明,但在块内部使用。所以,我真的很好奇

局部变量位于方法外部的代码如下所示:

_block BOOL stoppedEarly = NO; // this is the local variable
double stoppedValue = 52;
[aDictionary enumerateKeysAndObjectsUsingBlock: ^(id key, id value, BOOL *stop) {
NSLog (@"value for key %@ is %@", key, value);
if ([@"ENOUGH" isEqualToString: key] || [value doubleValue] == stoppedValue) {
*stop = YES;
stoppedEarly = YES;
} 
}];

1局部变量是强的才有意义,否则所有对象都会在创建后立即释放,或者您每次都必须添加_strong属性:

UIView *view = [[UIView alloc] init];
//if it wasn't a strong reference, view would be released here
//and you couldn't use the reference in the next line
view.backgroundColor = [UIColor blackColor];
2对于字典中的每个键值对,将调用示例中的块一次。由于代码的意图是对所有块调用使用一个变量,因此在它之外声明它。想想全局变量和方法

编辑:下面是一些关于变量范围的基本示例

//global, visible in all methods
NSInteger globalVariable; 

- (void)someMethod{
    //local, visible only until the end of the method 
    NSInteger localMethodVariable;

    void (^block)() = ^void() {
         //local, visible only until the end of the block
         NSInteger localBlockVariable;

         //may use all 3 variables here
    };

    //may use globalVariable and localMethodVariable here
}

- (void)someOtherMethod{
     //may use globalVariable here
}

你的问题似乎涉及两个完全不同的主题。每个帖子问一个问题。此外,我已经搜索了很多答案,在我看来,参数是一种表达式,在调用方法时会传入值,而在声明此方法时,参数是方法的一部分。然而,在阅读苹果iOS开发者资料时,我仍然混淆了它们。例如:int^myBlock int=^int num{return num*multiplier;};根据苹果网站上的iOS开发者资料,括号中的第二个int是一个参数。但是,我认为它应该是一个参数,因为它正在声明一些东西。参数和参数是一样的。这两个术语在某些上下文中可能更常用,例如方法参数和命令行参数,但它们之间没有区别。非常感谢!!因此,块中的变量:_blockbool stoppedEarly=NO;和:双停止值=52;是一种全局变量而不是局部变量吗。。。它们在声明它们的方法中仍然是局部的,但是对于使用它们的块来说是全局的。对于混合使用局部变量和全局变量,我感到非常抱歉。如果局部变量是强的,并且应该这样分配:UIView*view=[[UIView alloc]init];因此,块外部定义的变量不是局部变量。是这样吗?谢谢!我添加了一些示例来澄清变量的范围。希望能有帮助。