该块是否包含对self的引用?

时间:2014-03-25 07:24:01

标签: objective-c objective-c-blocks

-(void) vAfterMainVariable
{
    __weak BGGeneralCatalogView * weakSelf=self;
    [_loAIOnebyOne vLoadStuffsWithURLBlock:^(){
        NSString * URL= [weakSelf strGetURLToDownloadStuffs];
        return URL;
    } andPermaToastMessage: @"Loading Catalog" andCompletionBlock:^{}];
    //[self.loAIOnebyOne vLoadStuffsWithURLBlock:<#^NSString *(void)blURL#> andPermaToastMessage:<#(NSString *)#> andCompletionBlock:<#^(void)completionBlock#>]
}

-(NSString *) strGetURLToDownloadStuffs
{
    NSString * URL = [BGMakeURL URLforGetCatalogID:self.arArray];
    return URL;
}

我在块中使用weakSelf。然而,weakSelf指的是一个调用self.arArray

的函数

那么该块有没有强大的自我指针?当self,这是一个viewController从navigationController中消失后,它会很快被释放吗?

确切地说,该块不是指自我。该块指的是调用一个引用self的方法的weakSelf。然而,该方法中的自我是弱自我。

基本上我跟着这个:

- (void)dealloc
{
    [_loAIOnebyOne vCancelAllStuffs];
}

事实证明,只有在块完成后才会调用dealloc。所以块必须包含自我。但是如何?

另外,我如何知道哪个对象仍然引用我的对象?

引用我的对象的唯一对象应该是UINavigationController对象。下一个是在堆栈上执行的块。

1 个答案:

答案 0 :(得分:-3)

weakSelf需要是一个块变量。复制块时,它会创建自己的变量,其中包含weakSelf的副本,并且该副本不弱。