iPhone - 块内方法内的变量

发布于 2024-10-18 10:11:58 字数 227 浏览 2 评论 0原文

我们知道,如果我们希望块能够更改变量,则必须事先使用 __block 声明变量。 那样调用该块,会怎么样呢

dispatch_async(myQueue(), ^{
    [self doStuff];
});

但是,如果我们像doStuff 内部的代码 ?想象一下 doStuff 使用 .h 上声明的变量或属性。这些变量/属性是否需要使用 __block 前缀声明?

we know that we have to previously declare a variable using __block if we want a block to be able to change it. But what if we call the block like

dispatch_async(myQueue(), ^{
    [self doStuff];
});

is the code inside doStuff subjected to this rule? Imagine doStuff is using variables or properties declared on .h. Do these variables/properties need to be declared using the __block prefix?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

初见你 2024-10-25 10:11:58

我认为这没有多大区别。我认为我们可以使用实例方法和全局变量,就像我们在普通函数中使用它们一样。

例如:

 dispatch_async(dispatch_get_main_queue(), ^{
        liveImageView.image = image;
    if (image) {
        [self analyzeImage:image];
        currentImage = image; //here currentImage is a global variable, declared in .h
    }
    mod++;
    [image release];
});

I dont think that makes much differnce. I think we can use the instance methods ,and global variables, as we use them in normal functions.

For eg:

 dispatch_async(dispatch_get_main_queue(), ^{
        liveImageView.image = image;
    if (image) {
        [self analyzeImage:image];
        currentImage = image; //here currentImage is a global variable, declared in .h
    }
    mod++;
    [image release];
});
落在眉间の轻吻 2024-10-25 10:11:58

您不需要在任何实例变量上使用 __block 前缀来调用该方法,因为方法中使用的变量与块无关。这只是一个方法调用。

但请注意,该块将保留 self

You don't need to use the __block prefix on any instance variable to make that method call because the variables used in the method have nothing to do with the block. It is just a method call.

But be aware that the block will retain self.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文