2014-03-25 71 views
0
-(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該塊是否包含對自我的引用?

那麼這個塊會有強的指向自我的指針嗎?當自我,這是一個viewController從navigationController消失了,它會很快被釋放?

確切地說,該塊並不是指自我。該塊指的是weakSelf,它調用一個引用自我的方法。然而,該方法中的自我是弱自我。

基本上我遵循與此:

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

而事實證明的dealloc根本就沒有叫後才塊是終點。所以塊必須包含自我。但是如何?

另外我如何知道哪個對象仍然指向我的對象?

引用我的對象的唯一對象應該是UINavigationController對象。下一個將是在堆棧上執行的塊。

+3

你在做什麼很好。 – rmaddy

+0

在實踐中,創建一個可能的強保留週期有什麼意義? – holex

+0

實際上自己沒有指向該塊的指針。我只是不想等到塊完成運行直到自我釋放。所以堆棧引用了該塊。 –

回答

-3

weakSelf需要是塊變量。當該塊被複制時,它會創建自己的變量,其中包含一個weakSelf的副本,並且該副本不會很弱。

+1

我確信這是錯誤的。該塊捕獲的'weakSelf'副本也很弱。 –

相關問題