如果在函数内的块中定义Objective C块,内部块可以访问哪个范围?

时间:2011-09-02 13:57:21

标签: objective-c xcode4 closures objective-c-blocks

如果在函数内的块中定义块,

内部块可以访问的范围。

此外,您是否必须这样做以防止保留self(正确形成假装块):

-(void)function
{
__block id me = self;
^{
     __block id me2 = me;
    ^{
        [me2 ...];
    ^}
^}
}

1 个答案:

答案 0 :(得分:1)

我有

形式的块
-(void) function
{
    __block bool isOK = true;
    // ...
    [someArray enumerateObjectsWithBlock: ^(id obj, bool** stop)
    {
        // ...
        [someOtherArray enumerateObjectsWithBlock: ^(id obj, bool** stop)
        {
           // ...
           isOK = false;
        }];
    }];
}

因此内部块可以访问外部块的范围。

为什么要阻止自己被保留?无论如何,对象必须在块的生命周期内使用。