2013-07-10 59 views
1

我有一些塊的方法,在下一個內部觸發一個方法,以便與Web服務同步一些數據。其中大部分表現完全正常,但有一種方法在被調用後不會讓我提及self,給我一個capturing self strongly in this block is likely to lead to a retain cycle的警告。難以解釋的`強烈捕獲自我`警告

這裏就是我的意思是:

[self deleteEntriesCorrespondingToDeletedNotesInNotebook:notebook success:^{ 
    [self deleteNotesToMatchDeletedEntriesWithCompletion:^{ 
     [self deleteResourcesToMatchDeletedMediaItemsWithCompletion:^{ 
      [self addOrUpdateEntriesCorrespondingToUpdatedNotesInNotebook:notebook success:^{ 
       //Anything calling a property or self after this point is a problem and gives the warning 
       [self addOrUpdateNotesCorrespondingToUpdatedEntriesWithCompletion:^{ 

       }]; 
      }failure:^{ 

      }]; 
     }]; 
    }]; 
}failure:^{ 

}]; 

爲什麼只有項目順利通過這一點任何想法,有這個問題嗎?如果我用另一種類似的方法替換之前的方法,則不存在問題。該問題僅在使用addOrUpdateEntriesCorrespondingToUpdatedNotesInNotebook:後才存在。

+0

你還可以添加每種方法的內部實現嗎? – Stavash

+0

谷歌「Objective-C阻止自我弱」,這是很多相同問題的謎題。 – 2013-07-10 09:44:34

+0

[在這個塊中強烈地捕獲自我可能會導致保留週期](http://stackoverflow.com/questions/14556605/capturing-self-strongly-in-this-block-is-likely-to -lead-to-a-retain-cycle) – 2013-07-10 09:45:41

回答

2

您的方法的所有可能「表現良好」或創建一個保留週期,具體取決於它們對完成塊所做的操作。

如這裏解釋:Blocks retain cycle from naming convention?,鐺編譯器使用命名約定來決定是否發出 警告或不:所有方法add...set...(!但不是addOperationWithBlock) 導致警告,其他的方法,沒有。

3
[self deleteEntriesCorrespondingToDeletedNotesInNotebook:notebook success:^{ 
    [self deleteNotesToMatchDeletedEntriesWithCompletion:^{ //this line here and the rest in your downward loop 

不使用自我。第一行

__typeof__(self) __weak _weakSelf = self; 之前相反做到這一點,然後從第二行起,隨着weakSelf

更換self嘗試。歡呼聲